gpt4 book ai didi

c# - 如何将一个大数字作为一个字符串递增,就好像它是一个整数一样?

转载 作者:太空宇宙 更新时间:2023-11-03 18:20:28 25 4
gpt4 key购买 nike

我一直在想办法,我不能只将字符串转换为 int。成为一个 int 太长了,这就是我需要这样做的原因。我可以为个位数做到这一点,但是一旦我想添加 10 或 20,我就不确定如何更改我的代码以允许这样做。如果我增加循环,它会增加字符串的长度,并且不会将其视为实际数字。我包含两种语言的原因是因为我将在答案中接受 C# 或 F# 代码。

open System

type String with
member this.Last() =
this.[this.Length - 1]

let mutable s = "1234567890" // the numbers I will use are a lot bigger than this.

for i in 0 .. 9 do // 9 is max before it increases the length of the string.
printfn "%s" s

let last = (s.Last().ToString() |> int) + 1

s <- s.[0 .. s.Length - 2] + last.ToString()

Console.Read() |> ignore

最佳答案

我怀疑在任何情况下使用字符串来表示数字都是一个好主意 - 您可以使用 BigInteger 来表示和处理大数字,它支持所有数字运算,而不仅仅是递增一个。

但是,这是一个有趣的问题,因此这是一个可能的 F# 解决方案:

let incString (s:string) = 
let rec loop acc carry i (s:string) =
match i, carry with
| -1, true -> System.String(Array.ofList ('1'::acc))
| -1, false -> System.String(Array.ofList acc)
| _ ->
match s.[i], carry with
| '9', true -> loop ('0'::acc) true (i-1) s
| c, false -> loop (c::acc) false (i-1) s
| c, true -> loop (char ((int c) + 1)::acc) false (i-1) s
loop [] true (s.Length-1) s

incString "9899"

内部 loop 函数采用以下参数:

  • acc 是一个累加器,用于收集新数的位数(从末尾开始)
  • carry 是一个 bool 标志,它是 true 如果我们想将 1 添加到下一个数字(这最初是 true 然后它也是 true 只要数字是 9 - 因为 9 将变成 0 然后我们需要添加到字符串中的下一个数字)。

  • i为当前索引,从上一个开始

  • s 是表示原始数字的输入字符串。

关于c# - 如何将一个大数字作为一个字符串递增,就好像它是一个整数一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57839373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com