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

#include<stdio.h> int main() { int n,count=0; scanf("%d",&n); if(n<0) n=-n; while(n>0) { if(n%10<(n/10)%10) { count++; } if((n/10)%10==n/10){ printf("NO"); return 0; } n=n/10; } if(count==0) { printf("YES"); } else{ printf("NO"); } return 0; }
这段代码试图判断一个整数的各位数字是否从左到右严格递增(例如123是递增,但132不是)。它先处理负数,然后通过循环比较相邻数字。

代码的逻辑存在一些问题,导致判断不准确。

- 循环中 `if((n/10)%10==n/10)` 这个条件是用来检测什么时候只剩一位数字吗?但它的写法有误。当n只有一位时,`n/10` 等于0,`(n/10)%10` 也是0,条件成立,但此时应该继续判断而不是直接输出NO。这个条件实际上永远不会在正确的时候触发,反而可能提前结束循环。

- 比较相邻数字时,`n%10` 是当前最低位,`(n/10)%10` 是次低位。但你的循环是从最低位向高位比较,而题目要求从左到右递增,也就是高位到低位递增。从低位向高位比较时,应该检查是否递减(即低位小于高位),而不是递增。你的条件 `n%10 < (n/10)%10` 实际上是在检查低位是否小于高位,这对应的是从左到右递减的情况,与题目要求相反。