一个错误是,当我使用工作表中的这个自定义函数(MultiplyBigNumbers)的到来。一些错误代码或语法?

问题描述 投票:1回答:1

我为大数字的乘法编写的代码(EXCEL VBA自定义功能),并显示正确的结果字符串格式。但是,似乎有什么东西不对的代码,我无法弄清楚。

图像更好地理解逻辑。

enter image description here

有上述图像中示出两种情况。矩阵为了将按照无数字改变。此外,第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
excel vba
1个回答
0
投票

我得承认,我Log数学没有,如果一个人想成为技术性很强,存在。不过我被困你的错误是因为该行的代码抛出一个错误:i4 = Int(Log(n2) / Log(10))n2=0

这里有一个样本测试显示:

Sub testiWishiKnewMathBetterThis()

'this will work
    MsgBox Log(500) / Log(10)

'this one won't.
    MsgBox Log(0) / Log(10)

End Sub

这里就是你会得到错误的屏幕截图:

uh oh

© www.soinside.com 2019 - 2024. All rights reserved.