字符串相加(力扣)

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

注意:

num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

代码块
所遇见的坑全在代码里进行了注释

class Solution {
public:
    string addStrings(string num1, string num2) {
        int len_1=num1.size()-1;
        int len_2=num2.size()-1;
        string ret="";
        int step=0;    //表示进位
        while(len_1>=0||len_2>=0){//以长的字符串为结束条件
             int sum=0; //每次将sum初始化为0
            sum+=step;//加进位
            if(len_1>=0){
                sum+=num1[len_1]-'0';
                len_1--;
            }
            if(len_2>=0){
                sum+=num2[len_2]-'0';
                len_2--;
            }
            if(sum>9){//有进位
                step=1;//因为相加的范围在0~18所以进位就只能为1,表示当前位的进位
                sum-=10;//当前的位的值
            }
            else{
                step=0;//如果没有进位也要记得更新
            }
            ret.insert(0,1,sum+'0');//将当前位进行头插
        }
    if(step==1){//表示两个数加完了但是还有进位如1+99则将1头插
             ret.insert(0,1,'1');
    }
        return ret;
    }
};

你可能感兴趣的:(算法)