415. 字符串相加:高精度加法

题目:

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

提示:

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

题解:

首先要理解一件事就是,数字和数字字符串的区别:即个位在字符串的哪里。

  1. 当使用数字字符串的时候,个位数是字符串的最后一位,
  2. 两个字符串相加,因字符串长度不一,所以最好翻转过来,这样字符串的开始就变成了个位。
  3. 相加过程即定义一个k为0,然后将k和每个字符串的第n位相加,将k的个位放到新字符串中,十位下一次循环

        int t=0;
        for(i,j; i>=0 ;i--,j--)
        {
            if(i>=0) t+=num1[i]-'0';
            if(j>=0) t+=num2[j]-'0';
            nums.push_back('0'+t%10);
            t=t/10;
        }

代码:

class Solution {
public:
    string addStrings(string num1, string num2) {
        string nums="";

        if(num1.size()<num2.size()){
            swap(num1,num2);
        }
        int i=num1.size()-1;
        int j=num2.size()-1;

        int t=0;
        for(i,j; i>=0 ;i--,j--)
        {
            if(i>=0) t+=num1[i]-'0';
            if(j>=0) t+=num2[j]-'0';
            nums.push_back('0'+t%10);
            t=t/10;
        }

        if(t) nums.push_back('0'+t);
        reverse(nums.begin(),nums.end());

        return nums;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_46423166/article/details/113705392