题解 | #大数加法#

大数加法

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    string solve(string s, string t) {
        string res;
        //补0
        int len_s = s.length();
        int len_t = t.length();
        int len_res = len_s < len_t ? len_t : len_s;
        for (int i = 0; i < len_res - len_s; i++) {
            s = "0" + s;
        }
        for (int i = 0; i < len_res - len_t; i++) {
            t = "0" + t;
        }

        //加法
        int carry = 0;
        int op1 = 0;
        int op2 = 0;
        int num = 0;
        for (int i = len_res - 1; i >= 0; i--) {
            op1 = string2int(s.substr(i, 1));
            op2 = string2int(t.substr(i, 1));
            num = op1 + op2 + carry;
            if (num >= 10) {
                num = num % 10;
                carry = 1;
            } else {
                carry = 0;
            }

            if (i > 0) {
                res = int2string(num) + res;
            }
            if (i == 0) {
                res = int2string(carry) + int2string(num) + res;
            }
        }

        if (res[0] == '0') {
            res = res.substr(1);
        }
        return res;
    }

    int string2int(string a) {
        const char* c = a.c_str();
        return *c - '0';
    }

    string int2string(int a) {
        string res;
        res += (a + '0');
        return res;
    }
};

先对齐,然后逐位相加。

全部评论

相关推荐

贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务