用数组编一个计算两数求余的计算,打算计算位数多的大数的,但测试运行过程中出现了非常奇怪的问题:随便输入两个数组,都能正确得出结果,但计算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

解决方案 »

  1.   

    你确认a(y + z)这个不超出a的索引么?
      

  2.   

    楼主研究的是啥?自定义 " mod " 函数?
      

  3.   

    自定义mod函数呢,想用在一些大数的处理中,比如超过20位的,用VB内置函数是不能算的。其中的数组是用两个输入框输入的,不涉及什么秘密啊,只是觉得输入框内容分配到两个数组的部分有点冗长,而且跟这个问题没关系,所以没贴。其中的y=ubound(a)-ubound(b),z从0到ubound(b)啊,y+z最小是ubound(a)-ubound(b),最大是ubound(a)啊,怎么可能超过数组界限呢?而且其他数都能算,就121除以11,1221除以11这类数不能算,谁来回答俺呢!
      

  4.   

    y = UBound(a) - UBound(b) '<- 先求y
    ...
    ReDim Preserve a(UBound(a) - 1) '<- 数组a变小了!!!!!!!!!!!!!!!!
    ...
    For z = 0 To UBound(b)
      If a(y + z) < b(z) Then