如何分割整数

问题描述 投票:1回答:3

[我正在尝试创建一个additive persistence程序,其中用户输入一个数字,该程序输出迭代的总数(或累加持久性)。

我想对其进行编码,以便不使用字符串数据类型。是否有任何内置函数或我可以使用的其他函数,以便可以将大量数字拆分为单独的数字?

注意事项:

  1. 我正在VB.Net中的控制台应用程序中编码
  2. 我在编码方面比较陌生
vb.net digits sum-of-digits
3个回答
1
投票

要获取以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)可容纳的位数更多的数字。


0
投票

此答案使用字符串

您可以将数字字符串中的各个字符转换为数字并求和。然后计算执行此操作的次数,直到结果<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


-1
投票

类似以下内容应该可以工作(用C#编写),您可以轻松地在VB.NET中编写它。如果输入数字不长,则可以在输入中使用整数或长数据类型,并使用适合数字的GetDigits方法。恕我直言,使用字符串会更好,因为整数/长整数无法处理大数。

persistence(2718)
© www.soinside.com 2019 - 2024. All rights reserved.