题目

从标准输入读入一个正整数 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