在线编译器 C

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

- 第一个循环正确计算了各位数字之和,保存在 number1 中。
- 第二个循环中,你先把 B 取模 10 得到最后一位数字,然后立即用这个一位数去乘 number2,接着又把 B 除以 10。但此时 B 已经被取模操作改变了,不再是原来的数字,所以循环无法正确遍历所有位。

提示:
- 在第二个循环中,你应该先保存当前位的数字,再更新 B 的值,而不是直接用 B 去取模并同时改变 B。
- 注意 number2 的初始值是 1,但乘积结果可能为 0,需要思考当数字中有 0 时的情况。