415. 字符串相加
模板:
定义 ans(答案) carry(进位)
从后往前遍历,从个位加起,然后依次前进
for(i=num1.size()-1,num2.size()-1;i>=0||j>=0||carry==1;j–,i–){
x=x<0?0:num1[i]-‘0’;
y=y<0?0:num2[j]-‘0’;
ans += to_string((x+y+carry)%10);//取整
carry = (x+y+carry)/10;//取余
}
reverse(ans.begin(),ans.end());//注意for循环,我们是从后往前加的,所以,我们需要将答案进行翻转
return ans;
class Solution {
public:
//很好的题,一般用string模拟大数相加
string addStrings(string num1, string num2) {
//字符串直接相加,一般指的是字符串的简单拼接,比如num1+num2
string ans = "";
int carry=0;
//模板
//从后往前进行相加
//i和j有一个不为0就要继续
//carry表示进位,最大为1,如果有进位的需要,那也要继续遍历
for(int i=num1.size()-1,j=num2.size()-1;i>=0||j>=0||carry==1;i--,j--){
int x = i<0?0:num1[i]-'0';
int y = j<0?0:num2[j]-'0';
ans = ans + to_string((x+y+carry)%10);//取个位
carry = (x+y+carry)/10;//取整位
}
reverse(ans.begin(),ans.end());
return ans;
}
};