在线编译器 C

#include <stdio.h> int main() { int n; scanf("%d",&n); int last=n%10; n=n/10; while(n>0){ int cur=n%10; if(cur>last&&cur==last){ printf("NO"); return 0; } last=cur; n=n/10; } printf("YES"); return 0; }
这段代码试图判断一个整数的各位数字是否从左到右严格递减(即每一位都比前一位小)。但代码中存在逻辑错误。

- 条件 `if(cur>last&&cur==last)` 永远不可能为真,因为一个数不可能同时大于和等于另一个数。这里应该检查的是当前位是否大于或等于前一位,如果是则说明不是严格递减。
- 变量 `last` 初始化为个位数,然后循环从十位开始向左比较,但比较的方向是反的:你实际上是在检查从右向左是否递增,而不是从左向右递减。

提示:
- 思考一下,要判断从左到右严格递减,应该从最高位开始比较,还是从最低位开始?你的循环顺序是否匹配这个方向?
- 检查条件 `cur>last&&cur==last`,这个条件在逻辑上有什么问题?正确的条件应该是什么?