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

#include <stdio.h> int main() { int N,A,B; scanf("%d",&N); while(N>=0) { A = N%10; B = (N/10)%10; if(A == B) { printf("YES"); return 0; } N = N/10; } if(A != B) printf("NO"); return 0; }
这段代码试图判断一个整数中是否有相邻的两位数字相同。它从个位开始,每次比较当前位和它的前一位(十位),如果找到相同就输出YES并结束,否则继续除以10检查下一位。

代码存在几个问题:

- 当N是一位数时,循环会执行,但B的计算会出错,因为N/10等于0,取模后B为0,此时A可能不等于0,但逻辑上一位数不应该有相邻数字。
- 循环结束后,变量A和B可能未定义(如果循环从未执行或执行到最后一位时B的计算无效),导致最后的if判断不可靠。
- 循环条件N>=0会导致N=0时也进入循环,但0除以10还是0,会无限循环或产生错误比较。

提示:
- 考虑当N小于10时,是否应该直接输出NO?因为一位数没有相邻数字。
- 循环条件应该确保每次比较时,N至少还有两位数字可以比较。可以思考如何修改循环条件来避免处理最后一位时出现无效比较。