题目描述
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
- 提示:
- num1 和num2 的长度都小于 5100
- num1 和num2 都只包含数字 0-9
- num1 和num2 都不包含任何前导零
- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
题解
从后往前遍历两个字符串:
1.定义val1和val2用于存放字符串每一位数字,定义next用于存放两数相加的进位。
2.将两数相加,判断是否有进位。然后将相加后的数存放到新的字符串中,注意这里用尾插!使用头插insert()时间复杂度太高。
3.如果两个字符串的长度相等,两个字符串的最后一位相加如果产生进位,则将1插入到新的字符串中。
class Solution {
public:
string addStrings(string num1, string num2) {
int end1=num1.size()-1, end2=num2.size()-1;
int val1=0, val2=0, next=0; //val1/val2用于接收字符串每一位上的数字,next表示进位
string retstr;
while(end1>=0 || end2>=0){ //直至两个字符串都遍历结束
if(end1>=0)
val1=num1[end1--]-'0';
else
val1=0;
if(end2>=0)
val2=num2[end2--]-'0';
else
val2=0;
int ret=val1+val2+next;
if(ret>9){
ret-=10;
next=1;
}
else
next=0;
retstr += (ret+'0'); //尾插
}
if(next==1)
retstr+='1';
reverse(retstr.begin(),retstr.end()); //逆置
return retstr;
}
};