繁体   English   中英

如何在VB.Net中使用与biginteger等效的indexof()?

[英]How to use the equivalent of indexof() with biginteger in VB.Net?

我试图将大量数字相加。 我已经知道了数字的长度
l = answer.bitLength()但我无法弄清楚如何使用For循环遍历每个数字。 有任何想法吗?

我正在使用java.math.biginteger

Visual Studio 2005版本2.0

我还应该补充一点,我似乎无法在正在使用的biginteger中使用<>或任何简单的数学选项。 如果有人可以告诉我如何使用其他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

汇总数字的最终解决方案。 多亏了efoghe。

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

如果将数字视为二进制字符列表,则可以通过将数字与0xF进行AND运算来获得最低有效的十六进制数字。 然后,如果将数字右移4位( >> 4 ),则可以获得下一个十六进制数字。

得到所有十六进制数字后,可以将它们求和,然后将其转换为小数

这样的事情应该起作用:

    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

另一种方法是执行以下操作(假定answer是肯定的):

int sum = 0;
while(answer > 0){
    sum += answer % 10;
    answer /= 10;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM