Online Compiler C

#include <stdio.h> int main() { int n, m=1,x=0 ,y=1; scanf("%d", &n); int count[10] = {0}; while (n > 0) { int d=n%10; if (d==0){ m=0; } x += d; y *= d; n = n / 10; } if (x != y||m==0) printf("NO"); else printf("YES"); return 0; }
这段代码的功能是:读入一个整数,判断其各位数字之和是否等于各位数字之积。如果相等输出"YES",否则输出"NO"。

代码中有一个逻辑问题:当数字包含0时,乘积y会变成0,此时和x通常不为0,所以会输出"NO"。但代码额外用变量m来标记是否出现过0,如果出现过0就直接输出"NO"。这个逻辑实际上重复了,因为乘积为0时条件x != y自然成立。

- 变量m的使用是多余的,因为当数字包含0时,乘积y已经为0,而和x不为0,条件x != y已经能正确判断。你可以思考一下去掉m相关的代码后结果是否一样。
- 注意变量y初始化为1,如果n本身是0,循环不会执行,y保持为1,x保持为0,此时会输出"NO"。但题目可能期望对0的特殊处理,你可以考虑这种情况是否符合要求。