Online Compiler C

// 判断自然数各位数字之和是否等于各位数字之积 #include <stdio.h> int main() { int n; scanf("%d", &n); int sum=0; int pro=1;// 数字之积,初始1(因为乘法单位元) if(n=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; }
这段代码的目的是判断一个自然数的各位数字之和是否等于各位数字之积。代码整体思路正确,但存在几个语法错误和逻辑问题。

- 第12行 `if(n=0)` 使用了赋值运算符 `=` 而不是比较运算符 `==`,这会导致条件判断错误。另外,自然数0的各位数字之和与积都是0,但你的处理方式需要修正。
- 第14行和第34行使用了花括号 `{}` 而不是圆括号 `()` 来调用 `printf`,这是语法错误,应该写成 `printf("YES\n");`。

- 注意变量 `pro` 初始化为1是合理的,但对于数字0的情况,循环不会执行,所以需要单独处理。你的特殊处理部分有语法错误,并且逻辑上可以合并到主判断中。