Vb.net 如何拆分整数

Vb.net 如何拆分整数,vb.net,digits,sum-of-digits,Vb.net,Digits,Sum Of Digits,我试图创建一个程序,其中用户输入一个数字,程序输出总迭代次数(或相加持久性) 我想对其进行编码,以便不使用字符串数据类型。 是否有任何内置函数或其他我可以使用的功能,以便我可以将一个大数字拆分为单独的数字 注意事项: 我正在用VB.Net编写一个控制台应用程序 我对编码比较陌生 要获取以10为基数的数字的最后一位,可以使用模运算符,即: 等等 当您有最后一位数字时,实际上可以使用整数除法将其截断: 1234 \ 10 = 123 32 \ 10 = 3 因此,现在可以重复这个过程,得到最后一个

我试图创建一个程序,其中用户输入一个数字,程序输出总迭代次数(或相加持久性)

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

注意事项:

  • 我正在用VB.Net编写一个控制台应用程序
  • 我对编码比较陌生

  • 要获取以10为基数的数字的最后一位,可以使用模运算符,即:

    等等

    当您有最后一位数字时,实际上可以使用整数除法将其截断:

    1234 \ 10 = 123
    32 \ 10 = 3
    
    因此,现在可以重复这个过程,得到最后一个数字。一旦原始数字减少到0,算法就完成了

    由于您不需要任何特定顺序的数字,因此我们不必担心这一点

    因此,鉴于:

    函数GetDigits(n为Int64)作为列表(Int64的)
    作为新列表的Dim数字(Int64)
    当n>0时
    数字。添加(n Mod 10)
    n=n\10
    结束时
    返回数字
    端函数
    
    你可以做:

    Console.WriteLine(String.Join(" ", GetDigits(12345678900)))
    
    要获得以下内容的输出:

    0987654321

    我使用了
    Int64
    (又称
    Long
    )作为
    GetDigits
    的参数,这样您就可以使用位数多于
    Int32
    (又称
    Integer
    )的数字

    由此,您可以:

    函数AdditivePersistence(n为Int64)为整数
    尺寸=0
    而n>9
    pers+=1
    n=GetDigits(n).Sum()
    结束时
    回程员
    端函数
    
    要获取以10为基数的数字的最后一位,可以使用模运算符,即:

    等等

    当您有最后一位数字时,实际上可以使用整数除法将其截断:

    1234 \ 10 = 123
    32 \ 10 = 3
    
    因此,现在可以重复这个过程,得到最后一个数字。一旦原始数字减少到0,算法就完成了

    由于您不需要任何特定顺序的数字,因此我们不必担心这一点

    因此,鉴于:

    函数GetDigits(n为Int64)作为列表(Int64的)
    作为新列表的Dim数字(Int64)
    当n>0时
    数字。添加(n Mod 10)
    n=n\10
    结束时
    返回数字
    端函数
    
    你可以做:

    Console.WriteLine(String.Join(" ", GetDigits(12345678900)))
    
    要获得以下内容的输出:

    0987654321

    我使用了
    Int64
    (又称
    Long
    )作为
    GetDigits
    的参数,这样您就可以使用位数多于
    Int32
    (又称
    Integer
    )的数字

    由此,您可以:

    函数AdditivePersistence(n为Int64)为整数
    尺寸=0
    而n>9
    pers+=1
    n=GetDigits(n).Sum()
    结束时
    回程员
    端函数
    
    您可以使用LINQ和数学函数来实现这一点

    Function getSum(number As Integer) As Integer
        Return CInt(Enumerable.Range(0, CInt(Math.Round(Math.Log10(number), 0)) + 1).
                    Select(Function(i) Math.Truncate(number / (10 ^ i)) Mod 10).Sum())
    End Function
    
    • 可枚举。范围:创建数字的0到log10之间的整数。这是位数-1
    • 选择:将数字除以(10^整数),删除小数,执行模10运算,只得到1部分
    • 求和:对这些数字求和
    将它放在函数中的一个循环中,该循环计算我们对函数进行了多少次分类,直到结果小于9为止

    函数持久性(数字为整数)为整数
    Dim计数=0
    Console.WriteLine($“原始编号:{Number}”)
    做
    number=getSum(number)
    Console.WriteLine($“编号:{Number}”)
    计数+=1
    当数字>9时循环
    Console.WriteLine($“Persistence:{count}”)
    返回计数
    端函数
    
    persistence(2718)
    
    原始号码:2718
    编号:18
    编号:9
    持久性:2

    使用字符串更简单。虽然您说过不想使用字符串,但这里有一个解决方案

    函数getSum(数字为整数)为整数
    返回编号.ToString().Sum(函数(c)CInt(c.ToString()))
    端函数
    
    • 将数字字符串中的单个字符转换为数字并求和
    您可以使用LINQ和数学函数来实现这一点

    Function getSum(number As Integer) As Integer
        Return CInt(Enumerable.Range(0, CInt(Math.Round(Math.Log10(number), 0)) + 1).
                    Select(Function(i) Math.Truncate(number / (10 ^ i)) Mod 10).Sum())
    End Function
    
    • 可枚举。范围:创建数字的0到log10之间的整数。这是位数-1
    • 选择:将数字除以(10^整数),删除小数,执行模10运算,只得到1部分
    • 求和:对这些数字求和
    将它放在函数中的一个循环中,该循环计算我们对函数进行了多少次分类,直到结果小于9为止

    函数持久性(数字为整数)为整数
    Dim计数=0
    Console.WriteLine($“原始编号:{Number}”)
    做
    number=getSum(number)
    Console.WriteLine($“编号:{Number}”)
    计数+=1
    当数字>9时循环
    Console.WriteLine($“Persistence:{count}”)
    返回计数
    端函数
    
    persistence(2718)
    
    原始号码:2718
    编号:18
    编号:9
    持久性:2

    使用字符串更简单。虽然您说过不想使用字符串,但这里有一个解决方案

    函数getSum(数字为整数)为整数
    返回编号.ToString().Sum(函数(c)CInt(c.ToString()))
    端函数
    
    • 将数字字符串中的单个字符转换为数字并求和
    问题不清楚,你能举例说明应用程序应该如何工作吗?@HojjatK这能回答你的问题吗?你为什么不想把它变成一个字符串?问题不清楚,你能举个例子说明这个应用程序应该如何工作吗?@HojjatK这能回答你的问题吗?为什么不想将其转换为字符串?如果返回的是数字列表,为什么是Int64?假设唯一可能的值是0-9,那么
    List
    就足够了,它将更好地描述您返回的值。@JonathanWillc