415. 字符串相加(C++)

题目

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

提示:

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

分析与题解

本题我们只需要对两个大整数模拟「竖式加法」的过程。从低到高逐位相加,如果当前位和超过 10,则向高位进一位。

具体实现也不复杂,我们定义两个指针 i j 分别指向num1和num2 的末尾,即最低位,同时定义一个变量add 维护当前是否有进位。

需要考虑add进位,当出现超出两个num的最大位数的进位时,程序才会正常运行

然后从末尾到开头逐位相加即可。对于两个数字位数不同的处理,这里统一在指针当前下标处于负数的时候返回 0,等价于对位数较短的数字进行了补零操作,这样就可以除去两个数字位数不同情况的处理,具体可以看下面的代码。

class Solution {
public:
    string addStrings(string num1, string num2) {
        int i = num1.size() - 1;
        int j = num2.size() - 1;
        string ans ="";
        int add = 0;
        //考虑下标从0开始的情况,所以size-1
        //同时考虑所有位数耗尽,但是还存在进位的情况
        while(i>=0 || j>=0 || add != 0){
            int x = i>=0?num1[i]-'0':0;
            int y = j>=0?num2[j]-'0':0;
            int result = x + y + add;
            //填入的位数再换成char数据类型
            ans.push_back('0' + result % 10);
            add = result / 10;
            i--;
            j--;
        }
        reverse(ans.begin(),ans.end());
        return ans;
    }
};

原文链接: https://www.cnblogs.com/buryinshadow/p/13541813.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    415. 字符串相加(C++)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/201839

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午8:56
下一篇 2023年2月12日 下午8:56

相关推荐