在线编译器 C

// 判断自然数各位数字之和是否等于各位数字之积 #include <stdio.h> int main() { int n; scanf("%d", &n); int sum=0; int pro=1;// 数字之积,初始1(因为乘法单位元) for(i=0;i>0;i++) { 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; }
这段代码试图判断一个自然数的各位数字之和是否等于各位数字之积。代码中有几个关键问题需要你注意。

- 循环条件 `for(i=0;i>0;i++)` 是错误的。这个循环的条件 `i>0` 一开始就不成立(因为 `i=0`),所以循环体一次都不会执行。你需要思考如何让循环正确遍历数字的每一位,直到数字被除尽(即 `n` 变为0)。

- 变量 `i` 没有声明类型。在C语言中,所有变量必须先声明再使用。你需要在 `int sum=0;` 附近加上 `int i;` 的声明。

- 输出语句中使用了花括号 `{}` 而不是圆括号 `()`。在C语言中,`printf` 的语法是 `printf("...");`,应该用圆括号。

- 另外,如果输入的数字是0,乘积初始为1会导致结果错误(0的各位数字之积应为0)。你可以考虑这个边界情况,但这不是当前的主要问题。

先集中解决循环不执行和变量声明的问题。