题目

从标准输入读入一个正整数 n,统计并输出该整数的十进制位数。

输入格式:一行输入一个正整数 n。

输出格式:输出一个整数表示其位数,末尾换行。

数据范围与约定:1 ≤ n ≤ 2×109。

思路与算法

1. 辗转整除法
任何非零整数通过不断整除 10(n /= 10)都可以逐位消除最低位,每消除一位计数器加 1,直到数值变为 0 时结束循环。

2. 边界情况考虑
若输入允许为 0,单纯的 while (n) 会循环 0 次。可初始化 cnt = 0,或用 do-while 循环确保至少统计 1 位。

完整程序

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        // 独立处理 0:数字 0 本身为 1 位数
        if (n == 0) {
            System.out.println(1);
            return;
        }

        int cnt = 0;
        // 取绝对值统一正负数
        int x = Math.abs(n);

        // 每次整除 10 剥离最低位,直到数值变为 0
        while (x > 0) {
            cnt++;
            x /= 10;
        }

        System.out.println(cnt);
    }
}

运行示例

输入:

12345

输出:

5