|
下面的程序效率不是很高,但超大整数乘法、加法的函数还是比较实用
Public Function factorial(num As Integer) As String
factorial = "1"
For num = num To 1 Step -1
factorial = strMult(factorial, Trim(Str(num)))
Next
End Function'1000 的阶乘=40238726007709377354370243392300398571937...用时6分钟
'超大整数乘法 (需调用下面的strAdd、strPlus自定义函数)
Public Function strMult(str1 As String, str2 As String) As String
Dim i As Integer
If Len(str2) = 1 Then
strMult = IIf(str2 = "0", "", str1)
For i = 1 To Val(str2) - 1
strMult = strAdd(strMult, str1)
Next
Else
strMult = strAdd(strMult(str1, Right(str2, 1)), strMult(str1 & "0", Left(str2, Len(str2) - 1)))
End If
End Function'超大整数加法 (需调用下面的strPlus自定义函数)
Public Function strAdd(str1 As String, str2 As String) As String
If Len(str1) < Len(str2) Then
strAdd = strAdd(str2, str1)
Else
Dim num As Long
strAdd = strPlus(str1, "", Val(Right(str2, 1)))
For num = 1 To Len(str2) - 1
strAdd = strPlus(Left(strAdd, Len(strAdd) - num), Right(strAdd, num), Val(Mid(str2, Len(str2) - num, 1)))
Next
End If
End FunctionPublic Function strPlus(str1 As String, str2 As String, num As Integer) As String
If Len(str1) = 1 Then
strPlus = (Val(str1) + num) & str2
Else
num = Val(Right(str1, 1)) + num
If num < 10 Then
strPlus = Left(str1, Len(str1) - 1) & num & str2
Else
strPlus = strPlus(Left(str1, Len(str1) - 1), (num Mod 10) & str2, 1)
End If
End If
End Function
|
|