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 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; }
这段代码的功能是:读入一个整数 n,然后计算它各位数字的和(x)与积(y),最后判断和是否等于积。但代码中有一个逻辑问题:当遇到数字0时,会直接输出"NO"并跳出循环,这会导致程序提前结束,无法正确判断所有情况。

- 你的代码在遇到数字0时立即输出"NO"并跳出循环,但题目可能要求处理包含0的数字。注意,0乘以任何数都得0,而和可能不为0,所以包含0的数字通常不满足和等于积的条件。但你的做法是直接输出"NO"并结束,这会导致程序无法继续处理后续数字,而且可能输出两次结果(一次在循环内,一次在循环外)。

- 另外,你的变量m没有被使用,可以删除。同时注意,如果输入的数字是0本身,循环条件n>0不成立,会直接跳过循环,此时x和y保持初始值0和1,导致输出"NO",但0的各位数字和与积都是0,应该输出"YES"。你需要考虑n=0的情况。