在线编译器 C

// 判断自然数各位数字之和是否等于各位数字之积 #include <stdio.h> int main() { int n; scanf("%d", &n); int sum=0; int pro=1;// 数字之积,初始1(因为乘法单位元) if(n=0)//特殊:输入值为自然数0(输入 n == 0 时,如果进入 while (n > 0) 循环,由于 0 > 0 不成立,循环一次都不会执行) { printf{"YES\n"}; } while (n > 0)// 输入值为自然数且不为0 { int digit = n % 10; // 取出最后一位数字diguit sum=digit+sum; pro=digit*pro; n = n / 10; //去掉已经计数过的最后一位数字,作为为下次循环的初始值 } if(sum==pro) { printf{"YES\n"}; } else { printf{"NO\n"}; } return 0; }
这段代码试图判断一个自然数的各位数字之和是否等于各位数字之积。代码中有几个关键问题需要你注意。

- 第11行 `if(n=0)` 使用了赋值运算符 `=` 而不是比较运算符 `==`,这会把 `n` 赋值为0,导致条件永远为假(因为赋值表达式的值是0),而且会覆盖掉你输入的 `n` 值。另外,`printf` 后面应该用圆括号 `()` 而不是花括号 `{}`。

- 对于输入为0的情况,你的思路是对的,但需要先修正赋值错误。同时,当 `n=0` 时,数字之和是0,数字之积通常定义为1(因为乘法单位元),所以0不满足相等条件,输出应该是"NO"而不是"YES"。你可以重新思考0这个特殊情况的处理逻辑。