在线编译器 C

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

- 第一个循环正确计算了各位数字之和,但循环结束后变量A的值变为0,因为每次循环都将A赋值为当前位数字,最后N变为0时A也被赋值为0。
- 第二个循环试图用A来计算各位数字之积,但此时A已经是0,所以循环不会执行,number2保持初始值1,导致比较结果错误。

提示:
- 思考如何保存原始数字的各位数字,以便在计算完数字之和后,还能再次遍历这些数字来计算乘积。
- 注意变量在循环结束后值的变化,考虑是否需要使用另一个变量来存储原始数字的副本。