我需要在非常大的整数上执行模运算。我的平台(编辑:.NET 2.0)支持的最大整数是64位整数,这对于我正在处理的数字来说不够大。
如何对超大整数执行模运算,例如12654875632126424875387321657498462167853687516876876?
我有一个解决方案,将数字视为字符串并逐个处理它,但我想知道是否有更好的方法。
这是我的函数,将数字视为字符串。它基本上按照手动计算的方式进行长除法。
如何对超大整数执行模运算,例如12654875632126424875387321657498462167853687516876876?
我有一个解决方案,将数字视为字符串并逐个处理它,但我想知道是否有更好的方法。
这是我的函数,将数字视为字符串。它基本上按照手动计算的方式进行长除法。
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账户号码(包含字母)转换为一个整数。然后,对该整数进行模运算。因此,您可以说执行模运算的真实整数源是一串数字。