Ich muss eine Modulusoperation an sehr großen Ganzzahlen durchführen. Die größte von meiner Plattform unterstützte Ganzzahl (edit: .NET 2.0) ist eine 64-Bit-Ganzzahl, die für die Zahlen, mit denen ich arbeite, nicht groß genug ist.Führen Sie einen Modulus in einer großen Anzahl aus?
Wie kann ich einen Modulus an wirklich großen ganzen Zahlen machen, wie 12654875632126424875387321657498462167853687516876876?
Ich habe eine Lösung, die die Zahl als eine Zeichenfolge behandelt und es Stück für Stück bearbeitet, aber ich wollte wissen, ob es einen besseren Weg gibt.
Hier ist meine Funktion Behandlung der Nummer als eine Zeichenfolge. Es macht im Grunde lange Teilung, wie Sie es von Hand tun würden.
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
Gibt es einen saubereren, effizienteren Weg?
EDIT: Um zu klären, kommen die ganzen Zahlen von IBAN Bankkontonummern. Gemäß der Spezifikation müssen Sie die IBAN-Kontonummer (mit Buchstaben) in eine ganze Zahl umwandeln. Dann machen Sie ein Modulo für die Ganzzahl. Also, ich denke, man könnte sagen, dass die wahre Quelle der Ganzzahl, um den Modulus auszuführen, eine Ziffernfolge ist.
Welche Sprache ist das? Vielleicht möchten Sie ein Tag hinzufügen. – billjamesdev
Es wäre auch hilfreich, ein Beispiel hinzuzufügen. Hast du die Lösung für die große Zahl in deinem Frage-Mod um einen anderen Wert? –