【leetcode】字符串相加 c++

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

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

示例1:

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

示例2:

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

示例3:

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

代码:

#include<sstream>
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,直接结束返回结果。
在这里插入图片描述
注意:
int转string的方法:用stringstream
string反转:reverse(s.begin(),end())

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值