代码如下
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
string add(string a,string b){
int alen=a.size(),blen=b.size();
string c;
int i=0;//i表示已经处理数字的个数
int flag=0;//flag表示进位
while(((alen-i)>0)&&((blen-i)>0)){//此部分表示对公共部分的相加
int temp=(a[alen-i-1]-'0')+(b[blen-i-1]-'0')+flag;//temp用来表示得到的结果,用int方便计算flag的值和保存结果
flag=temp/10;//flag检测有没有进位,如果temp大于或等于10,flag就会等于1,否则等于0
c+=(temp%10)+'0';//字符串对字符的处理是比较方便的,这个表达式可以在c的后面把得到的结果放进去
i++;//计算完了要对i进行+1,然后对下一个字符进行处理
}
//以下两个循环分别表示a与b长度不一样时,长度更长的那个的结果
while((alen-i)>0){
int temp=(a[alen-i-1]-'0')+flag;
flag=temp/10;
c+=(temp%10)+'0';
i++;
}
while((blen-i)>0){
int temp=(b[blen-i-1]-'0')+flag;
flag=temp/10;
c+=(temp%10)+'0';
i++;
}
if(flag)c+='1';//表示结果的第一位
reverse(c.begin(),c.end());//把得到的结果进行反转
return c;
}
int main()
{
string a,b;
cin>>a>>b;
cout<<add(a,b)<<endl;
return 0;
}
看了千遍不如自己动手做一遍,自己试着写一下,其实就是字符相加处理,进位处理,长度处理,结果第一位的处理这几个部分,动手写一写吧。