用陣列編一個計算兩數求余的計算,打算計算位數多的大數的,但測驗運行程序中出現了非常奇怪的問題:隨便輸入兩個陣列,都能正確得出結果,但計算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

uj5u.com熱心網友回復:
你確認a(y + z)這個不超出a的索引么?uj5u.com熱心網友回復:
沒明白你的“陣列”是怎么來的。樓主最好還是把相關代碼貼完整。
難道你這種代碼,還牽涉到什么“秘密”么!
另外,VB6有求余運算,
干嘛要自己弄這不著調的演算法?
就算自己寫,又何必用到“陣列”?
uj5u.com熱心網友回復:
樓主研究的是啥?自定義 " mod " 函式?uj5u.com熱心網友回復:
自定義mod函式呢,想用在一些大數的處理中,比如超過20位的,用VB內置函式是不能算的。其中的陣列是用兩個輸入框輸入的,不涉及什么秘密啊,只是覺得輸入框內容分配到兩個陣列的部分有點冗長,而且跟這個問題沒關系,所以沒貼。其中的y=ubound(a)-ubound(b),z從0到ubound(b)啊,y+z最小是ubound(a)-ubound(b),最大是ubound(a)啊,怎么可能超過陣列界限呢?而且其他數都能算,就121除以11,1221除以11這類數不能算,誰來回答俺呢!uj5u.com熱心網友回復:
你在報錯處看一下索引值不就清楚了嗎?大不了單步走一遍。uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/113897.html
標籤:VB基礎類
