Online Compiler C

#include <stdio.h> int main() { int n, a, b, i = 0; scanf("%d", &n); if (n <= 10) printf("NO"); while (n >= 10) { 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; }
这段代码试图判断一个整数的各位数字是否从左到右严格递减(例如 321 是,但 322 不是)。但逻辑上有问题,导致结果不正确。

- 变量 `i` 的初始值设为 0,但在循环中当发现递减时设为 1,一旦发现不递减就设为 0 并跳出。但循环结束后,`i` 的值只反映最后一次比较的结果,而不是整个数字的全局判断。例如数字 123,第一次比较 3>2 会设 i=1,但第二次比较 2>1 又设 i=1,最后输出 YES,而实际应该输出 NO。

- 另外,当 n 小于等于 10 时直接输出 NO,但像 10 这样的两位数其实应该判断,而代码跳过了。