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

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

- 代码中变量n和m的初始值都是0,但循环第一次执行时,n和m分别被赋值为当前最低位和次低位。如果输入的数字只有一位数(比如5),循环会执行一次,此时m=5,n=0,然后i变成0,循环结束。但此时n和m不相等,会输出NO。实际上,一位数没有相邻数字,应该输出NO,所以这个情况是正确的。但问题在于,如果输入的数字是0,循环不会执行,n和m保持0,会输出YES,而0只有一位,应该输出NO。你需要考虑输入为0时的特殊情况。

- 另外,循环中每次比较的是当前最低位和次低位,但循环结束后,如果是因为i变成0而退出,此时n和m保存的是最后一次比较的值。如果数字中有相邻相同数字,循环会提前break,此时n和m就是那对相等的数字。但如果数字中没有相邻相同数字,循环会一直执行到i变成0,此时n和m是最高两位的数字,它们可能相等也可能不等。例如输入121,循环过程:m=1,n=2,不等;i=12;m=2,n=1,不等;i=1;m=1,n=0,不等;i=0。最后n=0,m=1,不相等,输出NO,正确。但输入11时:m=1,n=1,相等,break,输出YES,正确。所以逻辑基本正确,但需要处理输入为0的情况。