Online Compiler C

#include <stdio.h> int main() { int n,m=0, x=0 ,y=1; scanf("%d", &n); int count[10] = {0}; while (n > 0) { int p=n%10 if (p==0){ break;} int d = n % 10; x += d; y *= d; n = n / 10; } if (x == y) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数各位数字的和与积是否相等。但代码中存在几个问题。

- 第8行 `int p=n%10` 缺少分号,会导致编译错误。
- 第9-10行的 `if (p==0){ break; }` 逻辑有问题:当遇到数字0时直接跳出循环,但题目可能要求处理包含0的数字(比如10、20等),此时和与积的比较会受影响。
- 变量 `m` 被声明但从未使用。

- 检查循环中 `break` 的使用是否合理。如果数字中包含0,积会变成0,但和可能不为0,此时应该继续处理所有数字,而不是提前退出。
- 注意代码中同时使用了 `p` 和 `d` 两个变量来获取数字的末位,实际上只需要一个变量即可,避免混淆。