题解 | #大数加法#
大数加法
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; }