在线编译器 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"); } n=n/10; } if(count==0) { printf("YES"); } else{ printf("NO"); } return 0; }
这段代码试图判断一个整数的各位数字是否从左到右严格递增(即每个数字都小于下一个数字)。但代码中存在逻辑错误和语法错误。

- 代码中 `if((n/10)%10=n/10)` 这一行使用了赋值运算符 `=` 而不是比较运算符 `==`,这会导致编译错误或逻辑错误。同时这个条件的意图也不清晰。
- 循环中每次将 `n` 除以10,但比较的是当前位和下一位,当 `n` 变成个位数时,`n/10` 为0,比较会出错。
- 变量 `count` 用来记录逆序的次数,但判断条件 `n%10 < (n/10)%10` 实际上是在检查当前位是否小于下一位,这与“递增”的方向相反。

- 思考一下:要判断数字从左到右是否递增,应该从最高位开始比较,还是从最低位开始?循环中每次去掉最后一位,比较的是相邻两位,但顺序是反的。
- 检查赋值语句 `=` 是否应该改为比较 `==`,并且重新考虑这个条件的作用。