我试图总结一个非常大的数字。我已经得到了数字的长度
l = answer.bitLength()
但我无法弄清楚如何使用For循环增加每个数字。有什么想法吗?
我正在使用java.math.biginteger
。
Visual Studio 2005版本2.0
我还应该补充一点,我似乎无法使用<>或者我正在使用的biginteger的任何简单的数学选项。如果有人能告诉我如何使用不同的大整数,我会更愿意交换。
Dim answer As java.math.BigInteger
Dim sum As Integer = 0
Dim x As Integer
Dim i As Integer
'Sets value of answer equal to 1
answer = java.math.BigInteger.valueOf(1)
'gets 100!
For i = 1 To 100
answer = answer.multiply(java.math.BigInteger.valueOf(i))
Next
'gets length of answer
Dim l As Integer
l = answer.bitLength()
'Sums up digits in 100!
For x = 0 To l - 1
'Need to pull each character here to add them all up
Next
总结数字的最终解决方案。感谢payoghe。
Dim r As Integer
Dim s As Integer
s = 0
While (answer.compareTo(java.math.BigInteger.valueOf(0)) > 0)
r = answer.mod(java.math.BigInteger.valueOf(10)).ToString()
s = s + r
answer = answer.divide(java.math.BigInteger.valueOf(10))
End While
答案 0 :(得分:0)
如果您将数字视为二进制字符列表,那么您可以AND
使用0xF
来获得最不重要的十六进制数字。如果你然后将数字右移4位(>> 4
),那么你可以获得下一个十六进制数字。
获得所有十六进制数字后,您可以将它们相加,然后convert them to decimal。
答案 1 :(得分:0)
这样的事情应该有效:
Dim bi As New System.Numerics.BigInteger(12345)
Dim c As Char
Dim s As Long
s = 0
For Each c In bi.ToString()
s = s + Integer.Parse(c.ToString())
Next
或者这种使用Mod和/(整数除法)的传统方法
Dim bi As New System.Numerics.BigInteger(12345)
Dim s As Long
Dim r As Integer
s = 0
While bi <> 0
r = bi Mod 10
s = s + r
bi = bi / 10
End While
答案 2 :(得分:0)
另一种方法是执行以下操作(假设answer
为正):
int sum = 0;
while(answer > 0){
sum += answer % 10;
answer /= 10;
}