我寫了this代碼使用大整數:
sum函數正常工作,但多功能不起作用。
任何人都可以幫助我解決我的問題嗎?C++中的BigNum代碼
0
A
回答
1
對我來說,它看起來是你首先存儲的數字最低有效數字。 然後這個最後一個循環看起來應該以相反的方式迭代,即從第一個最低有效位數開始,並將remander添加到Mul[i+1]
而不是Mul[i+1]
。
for(int i=m;i>0;i--)
{
if(Mul[i]>9)
{
Mul[i-1]+=Mul[i]/10;
Mul[i]%=10;
}
}
這將然而仍然是不夠的,因爲即使最後一位,Mul[m]
,仍然可以得到超過900,因此,你需要繼續過去吧。
但是,您的代碼可以變得簡單得多。
Mul[i+j]+=(Num1[i]*Num2[j]+temp)%10;
temp=(Num1[i]*Num2[j]+temp)/10;
這樣做了以後,你可能laving Mul[i+j]
比9較多,因此需要的(現在失敗)後處理。您可以更改此取餘數從整體總和,因此留下Mul[i+j]
總是小於10
void mul() {
int s1 = c1.size(), s2 = c2.size();
for (i = 0; i < s1; ++i) {
int temp = 0;
// note the condition - this ensures the cycle continues past i+s2
// as long as there is some remainder (assumes same length of Num2 and Mul)
for (j = 0; j < s2 || temp != 0; ++j) {
// add the current multiple and the remainder to the digit
Num[i + j] += Num1[i] * Num2[j] + temp;
// take the remainder from the whole sum, not only the added part
// this way Mul[i + j] < 10, therefore you don't need any postprocess
temp = Mul[i + j]/10;
Num[i + j] %= 10;
}
}
}
而且,你不需要到remander存儲temp
,你可以直接將其添加到Mul[i+j+1]
,無論如何,它將在下一次迭代中得到關注。
+0
非常感謝。它幫助了我 –
相關問題
- 1. bignum divison和C++中的值賦值
- 2. C++中的Bignum向量用法
- 3. emacs中的bignum/elisp
- 4. Windows的Bignum庫?
- 5. 迭代通過一個bignum - 紅寶石
- 6. C++代碼中的彙編代碼
- 7. 插入javascript代碼中的c#代碼
- 8. TensorFlow中C代碼的代碼完成
- 9. python中的C代碼和C代碼中的數組複製
- 10. Linux中的C代碼到Windows中的C代碼
- 11. python bignum數組?
- 12. 最好的bignum庫解決C++中的Project Euler問題?
- 13. Overloading =在bignum實現中
- 14. 的C++代碼
- 15. C#中的代碼'ghosts'#
- 16. Eratosthenes中的代碼C
- 17. 與代碼中的C#
- 18. C++中的委託代碼
- 19. LevelDB --- C++中的代碼
- 20. C++中的代碼組織
- 21. 在C#中的appcmd代碼?
- 22. C#中的XAML代碼#
- 23. c#中的等效代碼?
- 24. C++中的重構代碼
- 25. 代碼c中的MessageBox#
- 26. Objective-C代碼中的「eval」
- 27. 類中的C#代碼塊
- 28. C++中的Python代碼
- 29. C#中的代碼效率
- 30. C++中的SetFileAttributeW源代碼
這是什麼問題?對於2 * 3和23 * 45等小值,它打印什麼數字? – Trenin
例如123 * 123它給140310而不是15129 –
例如23 * 45它給45 –