Online Compiler C

#include<stdio.h> int main(void) { int n; scanf("%d",&n); while(n>0) { int pre=n%10; n=n/10; int cur=n/10%10; if(pre==cur){ printf("YES"); return 0; } } printf("NO"); return 0; }
这段代码试图判断一个整数中是否有相邻的两位数字相同。它从个位开始,每次取当前最后一位(pre)和倒数第二位(cur)进行比较,如果相等就输出YES并结束,否则继续。但代码的逻辑有错误。

- 在循环中,`int cur=n/10%10;` 这一行有问题。当n被更新为n/10后,再计算cur时,实际上cur取到的是新n的十位,而不是原数的前一位。这导致比较的不是相邻的两位数字。
- 另外,循环条件`while(n>0)`在n变成一位数时仍会执行一次,但此时cur的计算会出错(例如n=5时,n/10=0,cur=0,会错误地比较pre=5和cur=0)。

提示:
- 思考如何在不改变n的情况下,同时获取相邻的两位数字。可以尝试在循环开始前先保存一个变量,或者调整取位的顺序。
- 注意循环的终止条件,确保当数字只剩一位时不会进行无效的比较。