题目
从标准输入读入一个正整数 n,统计并输出该整数的十进制位数。
输入格式:一行输入一个正整数 n。
输出格式:输出一个整数表示其位数,末尾换行。
数据范围与约定:1 ≤ n ≤ 2×109。
思路与算法
1. 辗转整除法
任何非零整数通过不断整除 10(n /= 10)都可以逐位消除最低位,每消除一位计数器加 1,直到数值变为 0 时结束循环。
2. 边界情况考虑
若输入允许为 0,单纯的 while (n) 会循环 0 次。可初始化 cnt = 0,或用 do-while 循环确保至少统计 1 位。
完整程序
#include <stdio.h>
int main(void)
{
int n;
if (scanf("%d", &n) != 1) {
return 1;
}
// 独立处理 0:数字 0 本身为 1 位数
if (n == 0) {
printf("1\n");
return 0;
}
int cnt = 0;
// 取绝对值,统一正负数的处理逻辑
int x = n < 0 ? -n : n;
// 每次整除 10 剥离最低位,直到数值变为 0
while (x) {
cnt++;
x /= 10;
}
printf("%d\n", cnt);
return 0;
}运行示例
输入:
12345输出:
5