只考虑了正整数(速度还有很大的优化空间) 用的小学一年级的算法,嘿嘿 Function add$(a$, b$) '任意长度正整数加法 Dim arrmax() As Byte, arrmin() As Byte Dim la As Long, lb As Long, min As Long, max As Long Dim iCF As Byte '进位标志 Dim ret As Integer '两个数相加的结果 Dim head As Byte Dim temp As String la = Len(a) lb = Len(b) If la > lb Then arrmax = a arrmin = b Else arrmax = b arrmin = a End If head = UBound(arrmax) - UBound(arrmin) For i = UBound(arrmax) - 1 To 0 Step -2 If i >= head Then ret = arrmax(i) + arrmin(i - head) + iCF - 96 Else ret = arrmax(i) + iCF - 48 End If iCF = 0 If ret >= 10 Then ret = ret - 10 iCF = 1 End If add$ = CStr(ret) & add$ Next '最后一个iCF If iCF = 1 Then add$ = "1" & add$ End Function Sub test1() '随机生成整数验证结果 Dim a$, b$ For i = 1 To 10 a = CStr(Int(10000 * Rnd())) b = CStr(Int(10000 * Rnd())) Debug.Print a + "+" + b + "=", add(a, b), CLng(a) + CLng(b) Next End Sub Sub test2() '随机生成任意长度整数 Dim nlen As Long nlen = 30 Dim a$, b$ For i = 1 To Int(nlen * Rnd()) a = a + CStr(Int(10 * Rnd())) Next For i = 1 To Int(nlen * Rnd()) b = b + CStr(Int(10 * Rnd())) Next Debug.Print a + "+" + b + "=", add(a, b) End Sub
|