Онлайн компилятор C

#include <stdio.h> int main() { int i, m = 10, sum = 0; scanf("%d", &i); while (i % m != i) { sum += (i % m); i = i / 10; } sum = i + sum; printf("%d", sum); return 0; }
这段代码试图计算一个整数的各位数字之和,但逻辑上有问题。

- 循环条件 `i % m != i` 在大多数情况下会立即为假,导致循环不执行或只执行一次。因为 `i % 10` 的结果总是小于10,而 `i` 本身可能大于10,所以这个条件通常不成立。
- 循环内部 `i = i / 10` 会改变 `i` 的值,但循环条件没有正确判断是否还有剩余位数。
- 最后 `sum = i + sum` 试图加上最高位,但此时 `i` 已经被循环中的除法改变了。

- 提示1:思考如何用循环逐位提取数字,循环应该持续到数字变为0为止,而不是用 `i % m != i` 这种条件。
- 提示2:注意循环内部对 `i` 的修改会影响循环条件,你需要用一个临时变量来保存原始输入,或者调整循环逻辑。