輸入:
兩個用字符串表示的大整數 如a=1111111111111,b=222222222222222
輸出:
兩個數的和
Solution:
#include<iostream>
#include<algorithm>
#include<string>using namespace std;int add(const char&,const char&,int);int main(){string addend1;string addend2;cin>>addend1>>addend2;if(addend1.size()<addend2.size()){swap(addend1,addend2);}int carry=0; //如果兩個一位數相加大于9,產生進位int sum=0; //代表兩個一位數相加的和int i,j;char c;string result;for(i=addend1.size()-1,j=addend2.size()-1;j>=0;j--,i--){sum=add(addend1[i],addend2[j],carry);carry=sum/10;sum=sum%10;c=sum+'0';result+=c;}if(i>0){for(;i>=0;i--){sum=add(addend1[i],'0',carry);carry=sum/10;sum=sum%10;c=sum+'0';result+=c;}}if(carry>0){c=carry+'0';result+=c;}reverse(result.begin(),result.end());cout<<result<<endl;return 0;
}int add(const char &a,const char &b,int carry){return a+b-2*'0'+carry;
}
思路:
按位相加,將十位數轉為進位記錄下來,個位數轉成字符串記錄下來,最后將所得字符串反轉既得所需結果。