在线编译器 C

#include <stdio.h> int main() { int n,save_n; scanf("%d",&n); save_n=n; int sum=0; while(n>0){ int last=n%10; sum=sum+last; n=n/10; } n=save_n; int plus=0; while(n>0){ last=n%10; plus=plus*last; n=n/10; } if(sum==plus){ printf("YES"); }else{ printf("NO"); } return 0;
这段代码的目的是判断一个整数的各位数字之和是否等于各位数字的乘积。代码从用户输入一个整数,然后分别计算各位数字的和与积,最后比较并输出YES或NO。

代码中存在一个错误,导致乘积计算不正确。

- 在第二个循环中,变量`last`没有声明类型。你在第一个循环中使用了`int last=n%10;`,但在第二个循环中直接写`last=n%10;`,此时`last`没有被定义。C语言要求变量在使用前必须先声明。
- 乘积的累加语句`plus=plus*last;`中,`plus`初始值为0,任何数乘以0结果都是0,所以乘积永远为0。你需要将`plus`初始化为1,因为乘法需要从1开始累乘。