藍橋杯 演算法提高 大數加法
阿新 • • 發佈:2019-02-09
演算法提高 大數加法
時間限制:1.0s 記憶體限制:256.0MB
問題描述
輸入兩個正整數a,b,輸出a+b的值。
輸入格式
兩行,第一行a,第二行b。a和b的長度均小於1000位。
輸出格式
一行,a+b的值。
樣例輸入
4
2 樣例輸出 6 這道題注意99+999或者999+999 上限加一的問題。
2 樣例輸出 6 這道題注意99+999或者999+999 上限加一的問題。
#include<iostream> #include<string> using namespace std; int main() { string a,b; int ans[1005]; //用來儲存相加後的結果 cin >>a>>b; int alen=a.length(),blen=b.length(),i,j; if(alen<blen){ //為了防止溢位,我先給他們的前導都加了一個0 for(i=0;i<=blen-alen;i++) a="0"+a; b="0"+b; } else if(alen>blen){ //為了防止溢位,我先給他們的前導都加了一個0 for(i=0;i<=alen-blen;i++) b="0"+b; a="0"+a; } else { //為了防止溢位,我先給他們的前導都加了一個0 a="0"+a; b="0"+b; } // cout <<a<<endl<<b<<endl; int k=0; for(i=a.length()-1;i>=0;i--){ //從低位開始相加 int t=(a[i]-'0')+(b[i]-'0'); if(t>9){ a[i-1]++; //大於9,則,大位加一。 t-=10; //本位-10 } ans[k++]=t; //儲存結果。 } if(ans[k-1]==0) //如果第一位數是0,即沒有溢位,則位數下移一位。 k=k-1; for(i=k-1;i>=0;i--) //低位相加,倒序輸出。 cout <<ans[i]; return 0; }