Mit dieser Funktion kann man sehr riesige Zahlen miteinander multiplizieren, dazu muss man die Zahlen als String angeben und als String bekommt man auch das Ergebnis zurück.
''' <summary>
''' Mit dieser Funktion kann man 2 Werte miteinander multiplizieren jedoch nach dem Prinzip
''' der schriftlichen Multiplikation. Man kann beliebig große Werte berechnen
''' </summary>
Public Function Multiply(ByVal A As String, ByVal B As String) As String
Dim LineLen As Long
Dim Run As Long
Dim N1 As Short
Dim N2 As Short
Dim z As Short
Dim i As Long
Dim ZeroLen As Long
Dim TmpLng As Long
Dim TmpStr As String
Dim AddTmp As Long
Dim LineX As String
Dim TmpResult As String = ""
Dim Result As New System.Text.StringBuilder
Dim LineArray() As String
ReDim LineArray(B.Length)
LineX = New String("0", B.Length - 1)
For Run = 1 To B.Length
For i = 1 To A.Length
N1 = Integer.Parse(Mid(B, Run, 1))
N2 = Integer.Parse(Mid(A, Len(A) - i + 1, 1))
TmpLng = N1 * N2
TmpLng = TmpLng + z
If i <> A.Length Then
If TmpLng > 9 Then
z = Integer.Parse(Mid(TmpLng.ToString, 1, 1))
LineX = Mid(TmpLng.ToString, 2) & LineX
Else
LineX = Mid(TmpLng.ToString, 1) & LineX
z = 0
End If
Else
LineX = TmpLng.ToString & LineX
End If
Next i
LineArray(Run) = LineX
If Run = B.Length Then Exit For
LineX = New String("0", B.Length - Run - 1)
z = 0
Next Run
'Leere stellen mit Nullen füllen
ZeroLen = LineArray(1).Length
For i = 2 To LineArray.Length - 1
LineArray(i) = New String("0", ZeroLen - LineArray(i).Length) & LineArray(i)
Next i
'Alles addieren
LineLen = Len(LineArray(1))
AddTmp = 0
z = 0
For Run = 0 To LineArray(1).Length
If Run = LineArray(1).Length Then Exit For
AddTmp = 0
'Es werden die Spalten der übereinanerliegenden Arrayeinträge addiert
For i = 1 To LineArray.Length - 1
AddTmp = AddTmp + Integer.Parse(Mid(LineArray(i), LineLen - Run, 1))
Next i
AddTmp = AddTmp + z
z = 0
'Falls wir in der letzten Runde sind aber AddTmp > als 9 ist würde ja normalerweise
'der Algorithmus die Zahl nochmal aufteilen wollen um in der nächsten Runde
'den Restwert zu übergeben. Da das aber dies die letzte Runde ist wird AddTmp
'einfach so vorgeschrieben ohne weiterzumachen.
If Run + 1 = LineArray(1).Length And AddTmp > 9 Then
'TmpResult = AddTmp.ToString & TmpResult
Result.Insert(0, AddTmp.ToString)
Exit For
End If
'Falls die Zahl größer als 9 ist dann wird der Restwert in z abgelegt
'und der Rest wird zu dem Result String hinzugefügt
If AddTmp > 9 Then
TmpStr = AddTmp.ToString
AddTmp = Integer.Parse(Mid(TmpStr, TmpStr.Length))
z = Integer.Parse(Mid(TmpStr, 1, TmpStr.Length - 1))
End If
Result.Insert(0, AddTmp.ToString)
Next Run
Return Result.ToString
End Function
5 Kommentare zum Snippet