题解 | #大数加法#
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
char *solve(char *s, char *t)
{
int lens = strlen(s);
int lent = strlen(t);
// 取最大的长度,加一,预留出进位,再加一,预留出结束位字符'\0'
int lenResult = (lens > lent ? lens : lent) + 1 + 1;
char *result = (char *)malloc(lenResult);
memset(result, 0x0, lenResult);
// 后续从结束位之前开始运算
int curPtr = lenResult - 1;
// 临时的运算结果保存
int temp = 0;
// 进位标志
int flag = 0;
// 只要有一个值没加完,就得一直加
// 里面所有字符串的操作为先减后用,因为C语言都是从0开始运算,所以使用都是先减再用
while (0 != lens || 0 != lent)
{
// 先加上一次的进位进行
temp = flag;
if (0 != lens)
{
temp += s[--lens] - '0';
}
if (0 != lent)
{
temp += t[--lent] - '0';
}
flag = temp / 10;
temp = temp % 10;
result[--curPtr] = temp + '0';
}
// 补上最前面的进位
result[0] = flag + '0';
printf("result : %s\n", result);
// 如果没有进位,则把最前面进位的预留位跳过
return flag ? result : result + 1;
}

查看12道真题和解析