[我正在尝试创建一个additive persistence程序,其中用户输入一个数字,该程序输出迭代的总数(或累加持久性)。
我想对其进行编码,以便不使用字符串数据类型。是否有任何内置函数或我可以使用的其他函数,以便可以将大量数字拆分为单独的数字?
注意事项:
要获取以10为底的数字的最后一位,您可以使用模运算符,称为Mod
,因此:
Mod
依此类推。
当您拥有最后一位数字时,本质上可以通过使用整数除法将其切掉:
1234 Mod 10 = 4
32 Mod 10 = 2
因此现在可以重复此过程以获取变成最后一位的数字。一旦原始数量减少到0,该算法就完成了。
由于您不需要按任何特定顺序排列数字,因此我们不必为此担心。
所以,给定:
1234 \ 10 = 123
32 \ 10 = 3
您可以做:
Function GetDigits(n As Int64) As List(Of Int64)
Dim digits As New List(Of Int64)
While n > 0
digits.Add(n Mod 10)
n = n \ 10
End While
Return digits
End Function
获得输出:
0 0 9 8 7 6 5 4 3 2 1
我为Console.WriteLine(String.Join(" ", GetDigits(12345678900)))
的参数使用了Int64
(又称Long
),以便您可以使用比GetDigits
(又称Int32
)可容纳的位数更多的数字。
此答案使用字符串
您可以将数字字符串中的各个字符转换为数字并求和。然后计算执行此操作的次数,直到结果<10。要求和,就很简单
Integer
将其放入函数的循环中:
number.ToString().Sum(Function(c) CInt(c.ToString()))
Function persistence(number As Integer) As Integer
Dim count = 0
Console.WriteLine($"Original Number: {number}")
Do
number = number.ToString().Sum(Function(c) CInt(c.ToString()))
Console.WriteLine($"Number: {number}")
count += 1
Loop While number > 9
Console.WriteLine($"Persistence: {count}")
Return count
End Function
输出
原始编号:2718数:18编号:9持续时间:2
类似以下内容应该可以工作(用C#编写),您可以轻松地在VB.NET中编写它。如果输入数字不长,则可以在输入中使用整数或长数据类型,并使用适合数字的GetDigits方法。恕我直言,使用字符串会更好,因为整数/长整数无法处理大数。
persistence(2718)