astr1 = mul1 astr2 = mul2 e = 1 '输入操作数正确标志 For i = 1 To Len(astr1) '检查第一输入的合法性 SUMSUM = Asc(Mid(astr1, i, 1)) If SUMSUM < 48 Or SUMSUM > 57 Then e = 2 End If Next i For i = 1 To Len(astr2) '检查第二个输入的合法性 SUMSUM = Asc(Mid(astr2, i, 1)) If SUMSUM < 48 Or SUMSUM > 57 Then e = 2 End If Next i If Len(astr1) = 0 Or Len(astr2) = 0 Then '其中任意一个操作数不能为空 e = 2 End If
If e = 1 Then A = Array(0, 0, 0, 0, 0, 0, 0) i = 0 k = 1 Do alen = Len(astr1) If alen <= 4 Then k = 2 A(i) = CLng(astr1) Else A(i) = CLng(Right(astr1, 4)) '每次从低位取4位 astr1 = Mid(astr1, 1, alen - 4) End If i = i + 1 Loop While k = 1 '到这里完成将10进制数第4位放入数组a wa = i '这里代表a数组里有几个数
B = Array(0, 0, 0, 0, 0, 0, 0) i = 0 k = 1 Do alen = Len(astr2) If alen <= 4 Then k = 2 B(i) = CLng(astr2) Else B(i) = CLng(Right(astr2, 4)) '每次取4位 astr2 = Mid(astr2, 1, alen - 4) End If i = i + 1 Loop While k = 1 '到这里完成将10进制数第4位放入数组b wb = i '这里代表b数组里有几个数
C = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) '定义最终结果数组,每一个0代表4位数 '---------------------------------相乘代码段开始(不考虑负数情况)-------------------------------- For i = 0 To 13 C(i) = 0 Next i
For i = 0 To 6 tmp2 = 0 For J = 0 To 6 sumtmp = A(J) * B(i) + tmp2 + C(i + J) C(i + J) = (sumtmp Mod 10000) tmp2 = Int(sumtmp / 10000) Next J C(i + J) = tmp2 Next i k = 1 For i = 13 To 0 Step -1 If C(i) <> 0 Or k <> 1 Then ttmp = CStr(C(i)) If Len(ttmp) < 4 And k <> 1 Then '当出现某个数组中的数为0890的情况,如果不补0,就会出错了。当然也要考第一个数防止出现数字最前面出现多余的0的情况