在线编译器 C

#include <stdio.h> int main() { unsigned int a, b; scanf("%d", &a); b = a / 100; if (b >= 1 && b <= 9) { printf("YES"); } else printf("NO"); return 0; }
这段代码的目的是判断输入的一个整数是否是三位数。它通过将输入的数除以100得到百位数字,然后检查这个结果是否在1到9之间。

- 代码使用了 `%d` 来读取 `unsigned int` 类型的变量,但 `%d` 是用于有符号整数的格式符,对于 `unsigned int` 应该使用 `%u`。这可能导致输入负数时出现意外行为。
- 判断三位数的逻辑有误:例如输入100时,`a/100` 等于1,会输出YES,但100是三位数;而输入999时,`a/100` 等于9,也会输出YES。但输入1000时,`a/100` 等于10,不在1到9之间,会输出NO,这正确。然而,输入99时,`a/100` 等于0,输出NO也正确。但问题在于,输入如123时,`a/100` 等于1,输出YES,但123确实是三位数。实际上,这个逻辑对于三位数(100到999)是正确的,但需要确认是否考虑了所有边界情况。另外,输入如0时,`a/100` 等于0,输出NO,但0不是三位数,正确。所以逻辑本身对于三位数判断是可行的,但格式符问题需要修正。