题解 | #大数加法#
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
char* solve(char* a, char* b ) {
// write code here
// if ((a == "0") || (b == "0")) return a == "0" ? b : a;
int alen = strlen(a), blen = strlen(b);
//获取大小两个字符串。
char* big = alen >= blen ? a : b;
char* small = alen < blen ? a : b;
int ret = 0;
int i = 0, j = 0, pos = 0;
int biglen = strlen(big);
int smalllen = strlen(small);
//fxs 这里为什么是加2呢,一个是'\0',一个用来存储进位。
char* ans = malloc(sizeof(char) * (biglen + 2));
ans[biglen + 1] = '\0';
printf("fxs smallen = %d, biglen = %d\r\n", smalllen, biglen);
//从字符串末尾开始进行加法。
for (i = smalllen - 1, j = biglen - 1, pos = biglen; j >= 0; j--, i--, pos--) {
if (i >= 0) {
ans[pos] = (small[i] + big[j] - '0' - '0' + ret) % 10 + '0';
ret = (small[i] + big[j] - '0' - '0' + ret) / 10;
} else {
ans[pos] = ((big[j] - '0' + ret) % 10) + '0';
ret = (big[j] - '0' + ret) / 10;
}
}
if (ret) {
ans[0] = '1';
} else ans++;
return ans;
}
查看17道真题和解析
