- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在想办法,我不能只将字符串转换为 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/
在引用此文档pressable docs之后,我将Pressable用于按钮 现在,我想向按钮添加波纹效果,但是它无法正常工作。 Button 如果按钮具有
在 C# 中,我想制作“智能”枚举,这在 Java 中是可能的,其中有更多信息附加到枚举值,而不仅仅是底层 int。我偶然发现了一个创建类(而不是枚举)的方案,如以下简单示例所示: public se
当执行 git stash 时,会创建 2 个提交。一个被 stash ref 引用并且有 2 个父提交。一位 parent 是我们 stash 地点的索引。另一方拥有我们 stash 的实际内容。
我是一名优秀的程序员,十分优秀!