输入:
两个用字符串表示的大整数 如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;
}
思路:
按位相加,将十位数转为进位记录下来,个位数转成字符串记录下来,最后将所得字符串反转既得所需结果。