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

#include <stdio.h> int main() { int n; scanf("%d",&n); int x=n%10; int flag=1; while(n!=0) { int y=n%10; if(y>=x) { flag=0; } x=y; n=n/10; } if(flag==0) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数的各位数字是否从左到右严格递减。它从右向左检查数字,但逻辑有误。

- 代码从个位开始,用变量 x 保存前一位数字,y 保存当前位数字。如果当前位 y 大于等于前一位 x,就认为不是递减,设置 flag=0。但题目要求的是从左到右递减,而你的检查方向是反的,导致条件判断错误。
- 另外,当数字只有一位时,循环不会执行,flag 保持为 1,会输出 "NO",但一位数通常应视为满足条件。

提示:
- 思考一下,从左到右递减意味着每一位数字必须小于它左边的那一位。你当前是从右向左比较,比较的方向反了,需要调整比较逻辑。
- 考虑一下如何从高位到低位依次获取数字,或者调整比较条件来适应你当前从低位到高位的遍历顺序。