Online Compiler C

#include <stdio.h> int main() { int N,A,B,number1=0,number2=0; scanf("%d",&N); while(N > 0) { A=N%10; number1 = number1 + A; N=N/10; } while(N>0) { A=N%10; number2 = number2 * A; N = N/10; } if(number1 == number2) printf("YES") else printf("NO"); return 0; }
这段代码试图判断一个整数的各位数字之和与各位数字之积是否相等。但代码中存在逻辑错误。

- 第一个while循环正确计算了各位数字之和,但循环结束后N已经变为0。
- 第二个while循环的条件是N>0,此时N已经是0,所以循环体永远不会执行,number2保持为0。
- 因此程序总是比较number1和0,结果不正确。

- 提示1:在第一个循环结束后,N的值被改变了。你需要保存原始输入值,或者用另一个变量来存储原始数字,以便第二个循环能再次处理各位数字。
- 提示2:注意第二个循环中计算乘积的写法是 number2 = number2 * A,但number2初始值为0,任何数乘以0都是0。乘积的初始值应该设为1。