Онлайн компилятор C

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

- 你的代码在循环条件中使用了 `n >= 0`,但输入的数字可能是负数。如果输入负数,循环会一直执行,因为负数不断除以10最终会变成0,但0也满足条件,导致无限循环。考虑一下循环应该在什么条件下终止,以及负数的情况是否需要特殊处理。

- 当数字只有一位数时,比如输入5,你的循环会先取个位和十位,但十位实际上不存在(相当于0),这可能导致误判。想一想如何正确处理位数不足的情况。