我为大数字的乘法编写的代码(EXCEL VBA自定义功能),并显示正确的结果字符串格式。但是,似乎有什么东西不对的代码,我无法弄清楚。
图像更好地理解逻辑。
有上述图像中示出两种情况。矩阵为了将按照无数字改变。此外,第2号将是1个或2位数只,而不是仅限于此。只有1号将超过20或30位。
我已经写的代码。
Public Function MultiplyBigNumbers(n1 As String, n2 As String) As String
Dim i1 As Long, i2 As Long, i3 As Long, i4 As Long
Dim i5 As Variant, i6 As Variant
Dim i7 As Long, i8 As Long
i3 = Int(Log(n1) / Log(10))
i4 = Int(Log(n2) / Log(10))
i5 = 0
i6 = 0
Select Case True
Case i3 = i4
ReDim Ad(1 To i3 + 1) As Long
ReDim Bd(1 To i3 + 1) As Long
For i2 = 1 To i3 + 1 Step 1
Ad(i2) = (Mid(n1, i2, 1))
Bd(i2) = (Mid(n2, i2, 1))
Next
For i1 = 1 To i3 + 1
If Bd(i1) > Ad(i1) Then
i5 = n2
i6 = n1
Exit For
ElseIf Bd(i1) <= Ad(i1) Then
i5 = n1
i6 = n2
End If
Next
Case i3 > i4
i5 = n1
i6 = n2
Case Else
i5 = n2
i6 = n1
End Select
i7 = Int(Log(i5) / Log(10)) + 1
i8 = Int(Log(i6) / Log(10)) + 1
i3 = 0
i4 = 0
Dim A() As Long
ReDim A(1, 1 To i7) As Long
For i3 = 1 To i7 Step 1
A(1, i3) = Mid(i5, i3, 1)
Next i3
i3 = 0
i4 = 0
Dim B() As Long
ReDim B(1 To i7, 1 To i7 + i8 - 1) As Long
If i8 = 2 Then
For i3 = 1 To i7 Step 1
For i4 = 1 To i7 + i8 - 1 Step 1
If i3 = i4 Then
B(i3, i4) = Mid(i6, 1, 1)
ElseIf i4 - i3 = 1 Then
B(i3, i4) = Mid(i6, 2, 1)
Else
B(i3, i4) = 0
End If
Next i4
Next i3
Else
For i3 = 1 To i7 Step 1
For i4 = 1 To i7 + i8 - 1 Step 1
If i4 - i3 = 1 Then
B(i3, i4) = Mid(i6, 1, 1)
Else
B(i3, i4) = 0
End If
Next i4
Next i3
End If
i3 = 0
i4 = 0
Dim k As Long
k = 0
Dim D() As Long
ReDim D(1, 1 To i7 + i8 - 1) As Long
For i3 = 1 To i7 + i8 - 1 Step 1
For k = 1 To i7 Step 1
D(1, i3) = D(1, i3) + A(1, k) * B(k, i3)
Next k
Next i3
i3 = 0
i4 = 0
For i3 = i7 + i8 - 1 To 2 Step -1
D(1, i3 - 1) = D(1, i3 - 1) + Int(D(1, i3) / 10)
D(1, i3) = D(1, i3) - 10 * Int(D(1, i3) / 10)
Next i3
Dim C() As Variant
ReDim C(1 To i7 + i8 - 1) As Variant
For i3 = 1 To i7 + i8 - 1 Step 1
C(i3) = D(1, i3)
Next i3
MultiplyBigNumbers = Join(C, "")
End Function