【leetcode】字符串相加 c++

题目描述:
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

示例1:

输入:num1 = "11", num2 = "123" 输出:"134"

示例2:

输入:num1 = “456”, num2 = “77”
输出:“533”

示例3:

输入:num1 = “0”, num2 = “0”
输出:“0”

代码:

#include
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,直接结束返回结果。
【leetcode】字符串相加 c++_第1张图片
注意:
int转string的方法:用stringstream
string反转:reverse(s.begin(),end())

你可能感兴趣的:(leetcode,c++)