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

#include <stdio.h> int main() { int n,i=1; scanf("%d", &n); while(n>9){ int digit1=n%10; int digit2=(n/10)%10; if(digit1==digit2){ printf("YES\n"); return 0; } n=n/10; } printf("NO"); return 0; }
这段代码的功能是判断一个整数中是否存在相邻的两位数字相等。它从个位开始,依次比较相邻的两位数字,如果找到相等就输出YES并结束,否则循环结束后输出NO。

你的代码逻辑基本正确,但有一个边界情况可能没有考虑。

- 当输入的数字只有一位数时,比如输入5,while循环条件n>9不成立,直接输出NO。但一位数没有相邻两位,输出NO是合理的。
- 你的循环每次比较当前最低两位,然后去掉最低位。但注意,当n变成个位数时循环结束,此时最后一位数字没有被比较过,这没有问题,因为已经比较了所有相邻对。

不过,你的代码在判断时只检查了digit1和digit2是否相等,但循环中n=n/10会改变n的值,导致后续比较的位数正确。整体思路是对的。

- 提示:考虑一下输入为0的情况。0只有一位,你的代码会输出NO,但0本身是否应该被视为有相邻相等数字?这取决于题目要求,但通常一位数没有相邻对,所以NO是合理的。如果题目要求0也输出YES,你需要单独处理。
- 提示:你的代码中变量i被定义了但从未使用,可以删除它让代码更简洁。