采用方法是模拟
错误代码:
char * addStrings(char * num1, char * num2){
int i = strlen(num1) - 1, j = strlen(num2) - 1, add = 0;
char* ans = malloc(sizeof(char) * fmax(i,j) + 3);
int len = 0;
//计算
while(i >= 0 || j >= 0 || add != 0){
int x = i >= 0 ? num1[i] - '0' : 0;
int y = j >= 0 ? num2[j] - '0' : 0;
int result = x + y + add;
ans[len++] = result / 10;
i--, j--;
}
//计算结果翻转过来
for (int i = 0; 2 * i < len; i++){
int t = ans[i];
ans[i] = ans[len - i - 1], ans[len - i - 1] = t;
}
ans[len++] = 0;
return ans;
}
记录错误:这段代码中ans 没有(char*)malloc,fmax(x,y)+3 没加括号;
在while循环中,ans[len++]和add串行了。
最后输出为“”,
输入
“11”
“123”
输出
“”
预期结果
"134"
正确代码如下:
char * addStrings(char * num1, char * num2){
//从两个数字最后一位开始相加, add是表示进位
int i = strlen(num1) - 1, j = strlen(num2) - 1, add = 0;
//定义char指针并分配空间,fmax是c语言库函数
char* ans = (char*)malloc(sizeof(char) * (fmax(i,j) + 3));
int len = 0;
//计算
while(i >= 0 || j >= 0 || add != 0){
int x = i >= 0 ? num1[i] - '0' : 0;
int y = j >= 0 ? num2[j] - '0' : 0;
//x, y 和进位相加
int result = x + y + add;
ans[len++] = '0' + result % 10;
//进位数字
add = result / 10;
//从低到高依次相加
i--, j--;
}
//计算结果翻转过来
for (int i = 0; 2 * i < len; i++){
int t = ans[i];
ans[i] = ans[len - i - 1], ans[len - i - 1] = t;
}
ans[len++] = 0;
return ans;
}
提交结果如下:
主要是为了逐渐弄懂代码,算法题目前写了几十个,不少都是自己写完发现有很大错误,然后照着题解一边写一边分析,现在打算将分析逐渐记录下来,并与大家分享,大家也可以在评论区提出错误。



