Online Compiler C

#include <stdio.h> int main() { int n, x=0 ,y=1; scanf("%d", &n); int count[10] = {0}; while (n > 0) { int d=n%10; if (d==0){ printf("NO"); break;} x += d; y *= d; n = n / 10; } if (x == y) printf("YES"); else printf("NO"); return 0; }
这段代码的功能是:读入一个整数,计算其各位数字的和与积,然后判断两者是否相等。如果相等输出YES,否则输出NO。但代码中有一个逻辑问题。

- 当数字包含0时,代码会立即输出NO并跳出循环,但此时还没有完成所有数字的处理,而且后面还会再次输出结果,导致可能输出两次。
- 如果数字不包含0,循环结束后会正确比较和与积,但需要注意变量y的初始值是1,如果数字只有一位且不为0,计算是正确的。

提示:
- 思考一下,当数字中包含0时,乘积会变成0,此时和与积相等的条件是什么?是否应该直接输出NO?
- 注意代码中如果遇到0就break,但break后程序还会执行后面的if判断,导致可能输出两个结果。考虑如何避免重复输出。