English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

偶想用vb寫計算2個超過9位數的最小公倍數而不溢位......
偶寫出下面ㄉ可是每當輸入數字太大總是溢位請問要如何修改??????

Private Function 最小公倍數(x1, x2 As Long)
Dim Max, Max2, MinNum, ReturnNum As Long
Dim I As Long
Dim IsMax As Boolean
MinNum = x1
Max = x2
Max2 = x2
If x2 < MinNum Then
MinNum = x2
Max = x1
Max2 = x1
End If
Do
IsMax = True
If Max Mod MinNum <> 0 Or Max Mod Max2 <> 0 Then
IsMax = False
Max = Max 1
End If
If IsMax Then
ReturnNum = Max
Exit Do
End If
Loop
最小公倍數 = ReturnNum
End Function

2006-01-01 18:24:34 · 3 個解答 · 發問者 1 in 電腦與網際網路 程式設計

另外偶要怎麼抓
在textbox內被使用者輸入的字數是多少?
要在Text_Change底下寫嗎??

2006-01-01 18:29:16 · update #1

偶之前有用c++寫過超過長整數的加/乘法
但是vb要怎樣改成字串運算勒??

2006-01-01 20:36:12 · update #2

除了字串運算外還有辦法嗎??
以偶po的那段程式碼來說要怎樣改勒?

2006-01-01 20:37:31 · update #3

3 個解答

Private Sub Command1_Click()Print Add(Text1.Text, Text2.Text)End SubFunction Add(ByVal A As String, ByVal B As String)Dim Ass(5), Bss(5), FinalTotal As String '可以處理6*5-1=29位數的加法Dim Total, AD As LongAL = Len(A): BL = Len(B)For i = 0 To 5 'A字串每5位數分解,從個位數開始If (AL - (i + 1) * 5 + 1) <= 0 Then  Ass(i) = Mid(A, 1, AL Mod 5)  Exit For '最後零散的取出來,然後跳離ForElse  Ass(i) = Mid(A, AL - (i + 1) * 5 + 1, 5) 'ㄧ次取5個End IfNext iFor i = 0 To 5 'B字串每5位數分解,從個位數開始If (BL - (i + 1) * 5 + 1) <= 0 Then  Bss(i) = Mid(B, 1, BL Mod 5)  Exit For '最後零散的取出來,然後跳離ForElse  Bss(i) = Mid(B, BL - (i + 1) * 5 + 1, 5) 'ㄧ次取5個End IfNext iAD = 0For i = 0 To 5Total = AD + Val(Ass(i)) + Val(Bss(i)) '加起來If Total = 0 Then  Exit ForEnd IfAL = Len(Total)AD = 0If AL <= 5 Then '無進位  Ass(i) = Mid(Total, 1, 5)Else '有進位  AD = Val(Mid(Total, 1, 1)) 'AD表示進位  Ass(i) = Mid(Total, 2, 5)End IfNext iFor i = 5 To 0 Step -1 '最後結果變成字串FinalTotal = FinalTotal + Ass(i)Next iAdd = FinalTotal '回傳End Function這是ㄧ個可以計算29位+29位數的程式,如果你了解的話,就可以修改成無限位數,請自行加以運用

2006-01-02 13:10:24 補充:
最小公倍數簡單原理,參照
http://tw.knowledge.yahoo.com/question/?qid=1405120603955

2006-01-02 08:08:45 · answer #1 · answered by 彩虹鈴 6 · 0 0

把X1,X2宣告成String,其他所有的變數都宣告成Variant,再轉成Decimal型態:MinNum=CDec(X1):Max=CDec(X2)......,把Max Mod MinNum <> 0改成InStr(CDec(Max / MunNum), ".") <> 0(表示除完後若有小數點就是不能整除),如此應該能承受更大的數字(Decimal型態:+/-79,228,162,514,264,337,593,543,950,335,無小數位數。對於 28 位數的數值範圍則為 +/-7.9228162514264337593543950335;最小的可能非零值是 0.0000000000000000000000000001),不過如果數字很大按照大大的程式應該會跑很久吧?

2006-01-02 08:46:23 · answer #2 · answered by W.J.S. 7 · 0 0

先講簡單的部份:
text1.text ="abc陸奧鬼一"
字數: len(text1.text),中文字算是 1,結果會是 7
如果中文要算是 2,lenb(text1.text),結果會是 11

再來兩數相乘的部份:
請回想一下以前小學是怎麼教乘法的,照著這個那方法,自己寫一個兩數相乘的 function。在 function 裡,最後的結果要以文字來處理。例如 AB * CD:
  AB
  CD
----
 JKL
PQRS
----
WXYZ

1.先看 JKL,L 就是 D*B 後的個位數,JK 是 D*A 的結果,如果在 D*B 的結果是兩位數還要把十位數也加進 JK 裡。

2.PQR 跟 JKL 一樣,不過就是要注意 R 是要對齊 N 的,而 S 其實是 0 (零)。

3.最後的 WXYZ,就是 JKL + PQRS。

如果擔心 JKL+PQRS 時,因為如果是兩個十多位的數字相乘,JKL 就不只三位數了,這時候可以再寫一個兩數相加用的 function,一樣是用到小學教加法的觀念,也是把數字以文字處理。

2006-01-01 19:56:05 · answer #3 · answered by Ike 3 · 0 0

fedest.com, questions and answers