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