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

#include <stdio.h> int main() { int n, a, b,i = 0; scanf("%d", &n); while (n != 0) { a = n % 10; b = (n / 10) % 10; if (a <= b) i = 0; else i = 1; n = n / 10; } if (i == 1) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数的各位数字是否从左到右严格递增(即每个数字比前一位大)。但逻辑上有问题。

代码中,变量 `i` 被反复覆盖,最终只记录了最后一次比较的结果,而不是整个数字序列的比较结果。例如,对于数字 123,第一次比较 3 和 2 得到 `i=1`,但第二次比较 2 和 1 又得到 `i=1`,看起来正确;但对于 132,第一次比较 2 和 3 得到 `i=0`,第二次比较 3 和 1 得到 `i=1`,最终输出 YES,但实际应该是 NO。

- 思考:如何确保一旦发现某一位不满足递增条件,就立即知道整个数字不满足条件?你可以在发现不满足时直接做出结论,而不是继续循环。
- 注意:当前循环从最低位开始比较,但题目要求的是从左到右递增。你需要确认比较的顺序是否正确。例如,数字 123 从最低位开始比较,实际上是先比较 3 和 2,再比较 2 和 1,这相当于从右向左检查递减,而不是从左向右递增。