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