Онлайн компилятор 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; break; } else i = 1; n = n / 10; } if (i == 1) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数的各位数字是否从左到右严格递减(即每一位都比下一位大)。但逻辑上有问题。

- 代码中变量 `i` 的初始值为0,但在循环中只有当某一位不满足递减条件时才将 `i` 设为0并跳出,否则设为1。但循环结束后,如果所有位都满足条件,`i` 最终会是1,但循环可能提前结束导致判断错误。
- 关键问题在于:当数字只有一位时,循环不会执行,`i` 保持0,会输出"NO",但一位数应该被认为是递减的。
- 另外,比较 `a <= b` 时,如果相等也会判定为不递减,这符合严格递减的要求,但逻辑上需要确保比较的是相邻位。

提示:
- 考虑当数字只有一位时,循环不执行的情况,此时 `i` 的值应该是什么?
- 检查循环中 `i` 的赋值逻辑:每次满足条件时都设为1,但一旦不满足就设为0并跳出,这样最后 `i` 的值能否正确反映整个数字是否递减?