题目描述:
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例1:
输入:num1 = "11", num2 = "123" 输出:"134"
示例2:
输入:num1 = “456”, num2 = “77”
输出:“533”
示例3:
输入:num1 = “0”, num2 = “0”
输出:“0”
代码:
#include<sstream>
class Solution {
public:
string add(string s,string ss,int a,int b){
reverse(s.begin(),s.end());
reverse(ss.begin(),ss.end());
int addflag=0;
string r="";
for(int i=0;i<b;i++){
stringstream strstr;
strstr<<(s[i]-'0'+ss[i]-'0'+addflag)%10;;
string number = strstr.str();
r=r+number;
addflag = (s[i]-'0'+ss[i]-'0'+addflag)/10;
}
for(int i=b;i<a;i++){
stringstream strstr;
strstr<<(s[i]-'0'+addflag)%10;
string number = strstr.str();
r=r+number;
addflag = (s[i]-'0'+addflag)/10;
}
if(addflag==1)r=r+'1';
reverse(r.begin(),r.end());
return r;
}
string addStrings(string num1, string num2) {
int n1=num1.length(),n2=num2.length();
string s="";
if(n1>n2)
s=add(num1,num2,n1,n2);
else
s=add(num2,num1,n2,n1);
return s;
}
};
设置一个addflag表示加法进位标志,初始化addflag=0,两个字符串从末尾开始每一位相加,并加上addflag,若加和结果大于10,结果为其除以10的余数,并设置addflag=1。
注意执行完所有位加和后,最后要判断一下,最高位进位标志addflag是否位1,如为1,表示最高位产生了进位。补上一位最高位;如为0,直接结束返回结果。
注意:
int转string的方法:用stringstream
string反转:reverse(s.begin(),end())