用数组编一个计算两数求余的计算,打算计算位数多的大数的,但测试运行过程中出现了非常奇怪的问题:随便输入两个数组,都能正确得出结果,但计算121除以11,1221除以11等这些数时,却提示“索引超出数组界限……”!看了几遍也找不出毛病在哪里,要崩溃了,请大牛们指点哦!代码如下,有点长,请耐心指导啊,错误图也附上,
Do While m = 0 If UBound(a) < UBound(b) Then
r = 1
Exit Do
End If
'如果a()位数小于b()的位数,则标记有余数,跳出do循环
For z = UBound(b) To 0 Step -1
If a(UBound(a) - UBound(b) + z) > b(z) Then
y = UBound(a) - UBound(b)
mm = 1
Exit For
'从高位向低位判断,如果出现a()大于b(),则可以相减并确定开始相减的位置,跳出for循环
ElseIf a(UBound(a) - UBound(b) + z) < b(z) And UBound(a) = UBound(b) Then
r = 1
Exit Do
'如果从高位出现a()小于b(),并且a()和b()位数相等,则不够减,标记有余数,跳出do循环
ElseIf a(UBound(a) - UBound(b) + z) < b(z) And UBound(a) > UBound(b) Then
y = UBound(a) - UBound(b) - 1
mm = 1
Exit For
'如果a()的位数足够,则开始相减的位置向下退一位
End If
Next
If mm = 0 And UBound(a) > UBound(b) Then
ReDim Preserve a(UBound(a) - UBound(b) - 1)
'如果比较完所有位数上的数字都相等,则减后这些位上将都是0,所以直接把这些数位去掉
ElseIf mm = 0 And UBound(a) = UBound(b) Then
r = 0
Exit Do
'如果所有位数上的数字都相等且a()和b()位数也相等,说明两数相等,直接标记无余数,跳出do循环
End If
If mm = 1 Then
For z = 0 To UBound(b)
If a(y + z) < b(z) Then
a(y + z) = a(y + z) + 10
a(y + z + 1) = a(y + z + 1) - 1
End If
'当可以相减时,不够减的位置进行借位
a(y + z) = a(y + z) - b(z)
Next
End If For z = UBound(a) To 1 Step -1
If a(z) = 0 Then
ReDim Preserve a(UBound(a) - 1)
Else
Exit For
End If
Next
'相减后,将高位的等于0的无效数字去掉
If UBound(a) = 0 And a(0) = 0 Then
r = 0
Exit Do
End If
'如果去到最后一位还是0,则标记无余数
Loop TextBox1.Text = TextBox1.Text & vbCrLf & r
Do While m = 0 If UBound(a) < UBound(b) Then
r = 1
Exit Do
End If
'如果a()位数小于b()的位数,则标记有余数,跳出do循环
For z = UBound(b) To 0 Step -1
If a(UBound(a) - UBound(b) + z) > b(z) Then
y = UBound(a) - UBound(b)
mm = 1
Exit For
'从高位向低位判断,如果出现a()大于b(),则可以相减并确定开始相减的位置,跳出for循环
ElseIf a(UBound(a) - UBound(b) + z) < b(z) And UBound(a) = UBound(b) Then
r = 1
Exit Do
'如果从高位出现a()小于b(),并且a()和b()位数相等,则不够减,标记有余数,跳出do循环
ElseIf a(UBound(a) - UBound(b) + z) < b(z) And UBound(a) > UBound(b) Then
y = UBound(a) - UBound(b) - 1
mm = 1
Exit For
'如果a()的位数足够,则开始相减的位置向下退一位
End If
Next
If mm = 0 And UBound(a) > UBound(b) Then
ReDim Preserve a(UBound(a) - UBound(b) - 1)
'如果比较完所有位数上的数字都相等,则减后这些位上将都是0,所以直接把这些数位去掉
ElseIf mm = 0 And UBound(a) = UBound(b) Then
r = 0
Exit Do
'如果所有位数上的数字都相等且a()和b()位数也相等,说明两数相等,直接标记无余数,跳出do循环
End If
If mm = 1 Then
For z = 0 To UBound(b)
If a(y + z) < b(z) Then
a(y + z) = a(y + z) + 10
a(y + z + 1) = a(y + z + 1) - 1
End If
'当可以相减时,不够减的位置进行借位
a(y + z) = a(y + z) - b(z)
Next
End If For z = UBound(a) To 1 Step -1
If a(z) = 0 Then
ReDim Preserve a(UBound(a) - 1)
Else
Exit For
End If
Next
'相减后,将高位的等于0的无效数字去掉
If UBound(a) = 0 And a(0) = 0 Then
r = 0
Exit Do
End If
'如果去到最后一位还是0,则标记无余数
Loop TextBox1.Text = TextBox1.Text & vbCrLf & r
...
ReDim Preserve a(UBound(a) - 1) '<- 数组a变小了!!!!!!!!!!!!!!!!
...
For z = 0 To UBound(b)
If a(y + z) < b(z) Then