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

#include <stdio.h> int main() { int n, result = 1, cymma = 0; scanf("%d", &n); int save_n; save_n = n; for(save_n; save_n > 0; save_n /= 10) { save_n %=10; cymma += save_n; result *= save_n; } if (cymma == result) { printf("YES"); } else { printf("NO"); } return 0; }
这段代码试图判断一个整数的各位数字之和是否等于各位数字之积。但代码中存在逻辑错误,导致无法正确计算。

- 在循环中,你修改了 `save_n` 的值,同时又用 `save_n /= 10` 来更新循环变量,这会导致循环提前结束或行为异常。你需要一个单独的变量来存储当前位的数字,而不是直接修改 `save_n`。
- 循环条件 `save_n > 0` 是正确的,但循环体内对 `save_n` 的两次操作(取模和除法)相互干扰。你应该先用一个临时变量保存当前位的数字,然后再对 `save_n` 做除法。