在线编译器 C

#include <stdio.h> int main() { int n; scanf("%d", &n); int flag = 0; while (n > 0) { int last = n % 10; int pre = (n / 10) % 10; if (last > pre) { flag = 1; break; } n /= 10; } if (flag == 1) printf("YES"); else printf("NO"); return 0; }
这段代码的作用是判断一个整数的各位数字是否从左到右严格递减。它从右向左检查相邻两位数字,如果发现某一位大于它左边的一位,就认为不是递减序列。

- 你的循环从最低位开始比较,但题目要求的是从左到右的递减顺序。你比较的是 last(当前最低位)和 pre(次低位),这实际上是反向比较。例如数字 321,你比较的是 1 和 2,发现 1 不大于 2,所以不会触发 flag,但实际从左到右是递减的,应该输出 YES。你的逻辑正好反了。

- 另外,当数字只有一位时,你的循环不会执行,flag 保持 0,输出 NO,但一位数字通常被认为是满足条件的。你需要考虑这种情况。