在线编译器 C

#include <stdio.h> int main() { int x, a = 0, b = 0; scanf("%d", &x); while(x>=1){ a = x%10; b = (x%100 - x%10)/10; x = x/10; if (a==b){ printf("YES"); }else{ printf("NO"); } } return 0; }
这段代码试图判断一个整数的每一位数字是否与它的前一位数字相等,但逻辑有误。程序每次循环只检查当前最后两位数字,并且每次循环都输出结果,导致输出多次。

- 循环条件 `x>=1` 会一直执行直到 x 变为 0,但每次循环都会输出一次结果,导致输出多个“YES”或“NO”。应该只在循环结束后输出一次结果。
- 变量 `b` 的计算方式 `(x%100 - x%10)/10` 实际上就是取 x 的十位数,但每次循环中 `a` 和 `b` 分别代表当前个位和十位,而循环中 x 不断缩小,这样比较的是相邻两位,但逻辑上需要检查所有相邻位是否相等,而不是只检查一次就输出。