题解 | #大数加法#
大数加法
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; } };
先对齐,然后逐位相加。