技術(shù) 點
- 技術(shù)
- 點
- V幣
- 點
- 積分
- 14911
|
下面的程序效率不是很高,但超大整數(shù)乘法、加法的函數(shù)還是比較實用
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分鐘
'超大整數(shù)乘法 (需調(diào)用下面的strAdd、strPlus自定義函數(shù))
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'超大整數(shù)加法 (需調(diào)用下面的strPlus自定義函數(shù))
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
|
|