leecode 415.字符串相加

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

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

示例 1:

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

输入:num1 = "456", num2 = "77"
输出:"533"
示例 3:

输入:num1 = "0", num2 = "0"
输出:"0"
 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这个题目首先考到的就是其实字符串也是数组(在c++中)所以我们其实可以同时指定两个指针,都一开始指向他们的最后一位,然后就像竖式运算一样加起来,怎么才能把它变成一个数字加起来呢,首先要考虑后面的一位有没有进位,把这两个在本位的数和进位的数加起来然后还要%10,避免超过10,然后还要把大于10 的部分提取出来作为进位的标志。

然后还出现一个问题就是:如果这两个数字的位数不同要怎么办?

如果它的索引数小于0,这证明它已经超过本身的字符串数组的长度。那么我们就把它定为0,这个循环的结束是当他们的索引都小于0,并且进位的标志也为0的时候,并且得到每一个书数还要把它转化成字符串。

最后要把这一个字符串逆置,因为我们得到的第一个数是得数的最后一位数。

class Solution {
public:
    string addStrings(string num1, string num2) {
       int i = num1.length()-1;
       int j = num2.length()-1;
       string ans = "";
       int add = 0;
       while(i>=0||j>=0||add!=0)
       {
           int a = i>=0 ? num1[i] -'0':0;
           int b = j>=0 ? num2[j] -'0':0;
           ans.push_back((a+b+add)%10 + '0');
           add = (a + b + add) / 10;
           i = i-1;
           j = j-1;
       }
       reverse(ans.begin(),ans.end());
       return ans;

    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值