问题分析:
你的代码存在一些问题,包括逻辑错误和输出格式错误。
1. 在计算差值时,你使用了=而不是==来比较大小。这会导致赋值操作而不是条件判断,结果不正确。
2. 在循环中的判断条件 len_b-1-i < 0 是错误的,应该是 len_b-1-i >= 0。
3. 在计算进位时,你没有正确处理进位的情况。在减法过程中,如果某一位的被减数小于减数,则需要向前一位借位,并且将当前位加上10。但你的代码中并没有正确执行这一步骤。
4. 最后,在输出结果时,你直接使用printf打印整型数组result,这样输出的是数组的地址而不是数值。
修改建议:
下面是修改后的代码,修正了上述问题:#include <stdio.h>#include <string.h>#define MAX 201int main(void) { char a[MAX], b[MAX]; int i, ten = 0, len_a, len_b, result[MAX]; scanf("%s", a); scanf("%s", b); len_a = strlen(a); len_b = strlen(b); for (i = 0; i < len_a; i++) { if (i < len_b) result[i] = a[len_a-i-1] - b[len_b-i-1] - ten + '0'; else result[i] = a[len_a-i-1] - '0' - ten; if (result[i] < '0') { result[i] += 10; ten = 1; } else { ten = 0; } } i = len_a - 1; while (i > 0 && result[i] == '0') i--; // 输出差值 for (; i >= 0; i--) { printf("%c", result[i]); } return 0;}
在修复逻辑错误后,代码将正确计算两个大正整数的差值,并按照要求输出结果。
希望能解决你的问题!如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要! |