Мне нужно выполнить операцию модуля над очень большими целыми числами. Самое большое целое число, поддерживаемое моей платформой (редактирование: .NET 2.0), — это 64-битное целое число, которое недостаточно велико для чисел, с которыми я работаю.
Как я могу использовать модуль для действительно больших целых чисел, например 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 (содержащий буквы) в одно целое число. Затем вы выполняете модуль над целым числом. Итак, я думаю, вы могли бы сказать, что реальным источником целого числа для выполнения модуля является строка цифр.