w22116972
3/28/2014 - 4:16 PM

大數加法

大數加法

int num1[1000005],num2[1000005],carry[1000005],sum[1000005];
memset(num1, 0, sizeof(num1));
memset(num2, 0, sizeof(num2));
memset(carry, 0, sizeof(carry));
memset(sum, 0, sizeof(sum));
// 從高位開始輸入的話 讀值就從最高項(m-1)開始往後讀
for (int i=m-1; i>=0; i--)
        cin >> num1[i] >> num2[i];
// 從最低位開始(0) 此位的數值為兩數相加再加進位項
// 再計算有無進位
for (int i=0; i<=m-1; i++) {
        sum[i]=(carry[i]+num1[i]+num2[i])%10;
        carry[i+1]=(carry[i]+num1[i]+num2[i])/10;
}
// 如果有最高位再進位的情形 就要輸出
if (carry[m])
        cout << carry[m];