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 因此,现在可以重复这个过程,得到最后一个
是否有任何内置函数或其他我可以使用的功能,以便我可以将一个大数字拆分为单独的数字 注意事项:
要获取以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部分
- 求和:对这些数字求和
函数持久性(数字为整数)为整数
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()))
端函数
- 将数字字符串中的单个字符转换为数字并求和李>
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部分
- 求和:对这些数字求和
函数持久性(数字为整数)为整数
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()))
端函数
- 将数字字符串中的单个字符转换为数字并求和李>
List
就足够了,它将更好地描述您返回的值。@JonathanWillc