力扣415. 字符串相加_填补我不会使用数字字符串进行相加的问题

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;
    }
};

你可能感兴趣的:(力扣刷题,c++)