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

#include <stdio.h> int main() { int n; scanf("%d", &n); int x = 0, y = 0; while (n >= 10) { x = n % 10; y = n / 10 % 10; if (x < y) { printf("NO"); return 0; } n = n / 10; } printf("YES"); return 0; }
这段代码的功能是判断一个整数的各位数字是否从左到右非递增(即每一位都不大于前一位)。它从右向左检查相邻两位,如果发现某一位小于它右边的位,就输出"NO",否则最终输出"YES"。

- 你的循环条件 `while (n >= 10)` 意味着当 n 只剩一位数时退出循环,此时会直接输出"YES"。但注意,如果输入的数字本身就是一位数,比如 5,循环不会执行,直接输出"YES",这是正确的。但问题在于,你比较的是当前最低位 x 和它左边的一位 y,而循环中每次比较后都去掉最低位,这实际上是从右向左比较,而不是从左向右。例如数字 321,从右向左比较:1<2 会输出"NO",但实际从左向右是递减的,应该输出"YES"。你需要调整比较的方向。

- 另外,你的代码没有处理负数的情况。如果输入负数,取模运算的结果可能为负,导致比较逻辑出错。可以考虑先取绝对值,或者明确题目是否只考虑非负整数。