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

#include <stdio.h> int main() { int n, m = 0; scanf("%d", &n); if (n == 0) { printf("NO"); } else { while (n != 0) { n = n / 10; m++; } if (m == 3) printf("YES"); else printf("NO"); } return 0; }
这段代码的功能是判断输入的整数是否为三位数(不包括负号)。它通过不断除以10来统计数字的位数,如果位数等于3则输出YES,否则输出NO。对于输入0,直接输出NO。

- 代码没有处理负数的情况。如果输入负数(如-123),while循环会先判断n != 0成立,但除以10后n会变成负数,导致位数统计不准确。考虑如何让负数也能正确判断位数。
- 对于输入0,代码直接输出NO,但0本身是一位数,逻辑上没问题。不过如果输入像100这样的数,代码会正确输出YES,但注意100除以10后变成10,再除以10变成1,最后除以10变成0,循环结束,m=3,正确。