非常に大きな整数に対してモジュラス演算を実行する必要があります。私のプラットフォーム(編集:.NET 2.0)でサポートされている最大の整数は64ビット整数ですが、これは私が使用している数値に対して十分な大きさではありません。
12654875632126424875387321657498462167853687516876876のような本当に大きな整数でモジュラスを実行するにはどうすればよいですか?
数字を文字列として扱い、1つずつ分割して処理するソリューションがありますが、もっと良い方法があるかどうかを知りたいと思いました。
これが、数値を文字列として扱う私の関数です。それは基本的にあなたが手でそれをするのと同じように筆算をします。
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
よりクリーンで効率的な方法はありますか?
編集:明確にするために、整数はIBAN銀行口座番号から来ています。仕様に従って、IBANアカウント番号(文字を含む)を1つの整数に変換する必要があります。次に、整数に対してモジュラスを実行します。したがって、モジュラスを実行する整数の実際のソースは数字の文字列であると言えると思います。