Ho bisogno di fare un'operazione di modulo su interi molto grandi. Il più grande numero intero supportato dalla mia piattaforma (modifica: .NET 2.0) è un numero intero a 64 bit, che non è abbastanza grande per i numeri con cui sto lavorando.Esegui un modulo in un numero enorme?
Come posso fare un modulo su numeri interi veramente grandi, come 12654875632126424875387321657498462167853687516876876?
Ho una soluzione che tratta il numero come una stringa e la lavora a pezzi una per una, ma volevo sapere se c'è un modo migliore.
Ecco la mia funzione che considera il numero come una stringa. Fondamentalmente fa una lunga divisione nel modo in cui lo faresti a mano.
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
Esiste un modo più pulito ed efficiente?
MODIFICA: per chiarire, gli interi provengono da numeri di conto bancario IBAN. Secondo le specifiche, devi convertire il numero di conto IBAN (contenente lettere) in un numero intero. Quindi, si esegue un modulo sul numero intero. Quindi, immagino si possa dire che la vera fonte del numero intero per eseguire il modulo sia una stringa di cifre.
Che lingua è questa? Potresti voler aggiungere un tag. – billjamesdev
Sarebbe anche utile includere un esempio. Hai la soluzione per l'enorme numero nella tua domanda mod di qualche altro valore? –