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

#include <stdio.h> int main() { int n, a, b, i = 1, p = 1; scanf("%d", &n); if (n < 10) printf("NO"); while (n >= 10) { a = n % 10; b = (n / 10) % 10; if (a <= b) { break; } else i++; n = n / 10; p++ } if (i == p && i != 2) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数是否严格递减(即每一位数字都比前一位小),但存在逻辑错误和语法问题。

- 变量 `p` 初始为1,但循环中 `p++` 没有正确记录数字位数,且 `p` 在循环结束后与 `i` 比较,但 `i` 和 `p` 的含义不清晰。
- 循环条件 `while (n >= 10)` 只处理至少两位数的数字,但内部逻辑可能提前退出,导致判断不准确。
- 语法错误:`p++` 后面缺少分号。

- 提示1:检查 `p` 的初始值和更新方式。`p` 应该记录数字的总位数,但当前代码中 `p` 从1开始,每次循环加1,而循环次数取决于数字长度。你需要确保 `p` 正确反映数字的位数,或者考虑用其他方式记录比较次数。
- 提示2:思考 `i` 的作用。`i` 从1开始,每次比较成功(即 `a > b`)时加1,但循环可能提前因 `a <= b` 而退出。最终 `i == p` 的条件想表达什么?如果数字严格递减,`i` 应该等于多少?重新设计循环后的判断逻辑。