2014-01-29 50 views
0

我寫了this代碼使用大整數:
sum函數正常工作,但多功能不起作用。
任何人都可以幫助我解決我的問題嗎?C++中的BigNum代碼

+0

這是什麼問題?對於2 * 3和23 * 45等小值,它打印什麼數字? – Trenin

+0

例如123 * 123它給140310而不是15129 –

+0

例如23 * 45它給45 –

回答

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

非常感謝。它幫助了我 –