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