天天看点

【LeetCode】C++ :简单题 - 字符串 415. 字符串相加

415. 字符串相加

难度简单302

给定两个字符串形式的非负整数 

num1

 和

num2

 ,计算它们的和。

提示:

  1. num1

     和

    num2

     的长度都小于 5100
  2. num1

     和

    num2

     都只包含数字 

    0-9

  3. num1

     和

    num2

     都不包含任何前导零
  4. 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式

这个和两数相加是一样道理的,在链表里面也出现过相同的题目。

模拟列竖式计算的过程,主要是一开始以n1 = 0, n2 = 0这样,然后对非空位数字将其赋值给相应的n1, n2,最后不要忘记对进位数进行处理。

我这里直接利用string类型里面加的功能,但注意是:res = num + res,不能是res += num,后面这样得到的结果整好的反着的。

另外,在对char 型的num[i] 计算,不能利用转int型,因此需要借助ASCII码,将num[i]-‘0’ 这样就可以得到int型的num[i]的数值啦

class Solution {
public:
    string addStrings(string num1, string num2) {
        int i = num1.length()-1, j = num2.length()-1;
        int carry = 0;
        string res = "";
        while(i >= 0 || j >= 0){
            int n1 = 0, n2 = 0;
            if(i >= 0){
                n1 = num1[i]-'0';
            }
            if(j >= 0){
                n2 = num2[j]-'0';
            }
            int sum = n1 + n2 + carry;
            res = to_string(sum % 10) + res;
            carry = sum / 10;
            i--;
            j--;
        }
        if(carry > 0){
            res = to_string(carry) + res;
        }
        return res;
    }
};