Potrzebuję wykonać operację modulus na bardzo dużych liczbach całkowitych. Największa liczba całkowita obsługiwana przez moją platformę (edycja: .NET 2.0) jest 64-bitową liczbą całkowitą, która nie jest wystarczająco duża dla liczb, z którymi pracuję.Wykonaj moduł w ogromnej liczbie?
Jak mogę wykonać moduł na naprawdę duże liczby całkowite, na przykład 12654875632126424875387321657498462167853687516876876?
Mam rozwiązanie, które traktuje liczbę jako ciąg znaków i działa w kawałkach jeden po drugim, ale chciałem wiedzieć, czy istnieje lepszy sposób.
Oto moja funkcja traktująca liczbę jako ciąg. Zasadniczo robi długi podział tak, jak robisz to ręcznie.
Public Function MyMod(ByVal numberString As String, ByVal modby As Integer) As Integer
Dim position As Integer = -1
Dim curSubtraction As Integer = 0
While position < numberString.Length - 1
position += 1
curSubtraction = curSubtraction * 10 + CInt(numberString.Substring(position, 1))
If (curSubtraction/modby) < 1 And position = numberString.Length - 1 Then
Return curSubtraction
ElseIf (curSubtraction/modby) < 1 Then
Continue While
Else
curSubtraction = curSubtraction Mod modby
End If
End While
Return curSubtraction
End Function
Czy istnieje bardziej ekologiczny i skuteczny sposób?
EDYCJA: Aby wyjaśnić, liczby całkowite pochodzą z numerów kont bankowych IBAN. Zgodnie ze specyfikacją musisz przeliczyć numer konta IBAN (zawierający litery) na jedną liczbę całkowitą. Następnie robisz moduł na liczbie całkowitej. Sądzę więc, że można powiedzieć, że prawdziwym źródłem liczby całkowitej do wykonania modułu jest ciąg cyfr.
Jaki to jest język? Możesz dodać tag. – billjamesdev
Przydałby się również przykład. Czy masz rozwiązanie ogromnej liczby modów w pytaniu o jakąś inną wartość? –