题解 | #大数加法#
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
char* solve(char* s, char* t ) {
int len,len_s,len_t;
int fi_s,fi_t,se_n;
long num = 1;
char *add;
len_s = strlen(s); len_t = strlen(t);
if(len_s == 0)
return t;
else if(len_t == 0)
return s;
else {
se_n = 0;
len = len_s < len_t ? (add = t,len_s) : (add = s,len_t);
while(*(add++) != '\0') {
fi_s = s[len_s - num] - '0';
fi_t = t[len_t - num] - '0';
if(num <= len) {
add[strlen(add) - num] = (fi_s + fi_t + se_n) % 10 + '0';
se_n = (fi_s + fi_t + se_n) / 10 == 1 ? 1 : 0; //进位
}
else {
if(len == len_s) {
add[strlen(add) - num] = (fi_t + se_n) % 10 + '0';
se_n = (fi_t + se_n) / 10 == 1 ? 1 : 0;
}
else {
add[strlen(add) - num] = (fi_s + se_n) % 10 + '0';
se_n = (fi_s + se_n) / 10 == 1 ? 1 : 0;
}
}
num++;
}
if(se_n == 1) { //处理99+1的情况
add = len_s < len_t ? t : s;
add[num + 1] = '\0';
for(;num>=1;num--)
add[num-1] = add[num-2];
add[0] = se_n + '0';
}
}
return len_s < len_t ? t : s;
}
查看9道真题和解析
