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;
    }
};


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM