Как использовать эквивалент indexof () с biginteger в VB.Net? - PullRequest
0 голосов
/ 25 января 2011

Я пытаюсь суммировать цифры в очень большом количестве. Я получил длину номера с
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

Окончательное решение для суммирования цифр. Благодаря Wageoghe.

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

Ответы [ 3 ]

0 голосов
/ 26 января 2011

Примерно так должно работать:

    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
0 голосов
/ 26 января 2011

Другой подход заключается в следующем: (предполагается, что answer положительно):

int sum = 0;
while(answer > 0){
    sum += answer % 10;
    answer /= 10;
}
0 голосов
/ 25 января 2011

Если вы думаете о числе как о списке двоичных символов, вы можете получить наименее значимую шестнадцатеричную цифру, набрав AND число с помощью 0xF. Если затем вы сдвинете число вправо на 4 бита (>> 4), то вы можете получить следующую шестнадцатеричную цифру.

После того, как вы получите все шестнадцатеричные цифры, вы можете суммировать их, а затем преобразовать их в десятичные .

...