在线编译器 C

#include <stdio.h> int main() { int a; scanf("%d", &a); int flag = 0; while (a > 0) { int last = a % 10; a = a / 10; if (a == 0) break; int pre = a% 10; if (last == pre) { flag = 1; break; } } if (flag == 1) printf("YES"); else printf("NO"); return 0; }
这段代码的功能是判断一个整数中是否存在相邻的相同数字。它从右向左逐位比较相邻的两个数字,如果发现相等就输出YES,否则输出NO。

- 你的代码在比较相邻数字时,每次循环都会把a除以10,然后检查新的a是否为0。如果a变成0就提前退出,这会导致漏掉一些情况。比如输入数字11时,第一次循环a变成1,此时a不为0,但下一次循环a变成0,循环结束,实际上没有比较到数字1和1。
- 你的循环条件while (a > 0)和内部的if (a == 0) break逻辑有重叠。当a只有一位数时,循环会直接退出,不会进行任何比较,但一位数本身不存在相邻数字,应该输出NO,你的代码确实输出NO,但处理方式不够清晰。建议重新思考循环的终止条件和比较逻辑,确保所有相邻数字对都被检查到。