源本科技 | 码上会

位数判断与数字逆序输出

2026/02/04
9
0

题目

给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

说明

本题考察对整数位数的判断以及数字逆序输出的实现方法。题目限制输入为不超过 5 位的正整数(即范围在0n<1000000 \leq n < 100000),需完成两个任务:

  1. 判断该数是几位数;

  2. 将其各位数字按逆序输出。

👈点击左箭头查看答案(一定要在自己思考并实现后再看参考答案哦!)

运行示例

请输入:12345
12345是五位数
按逆序输出是:
54321
请输入:7
7是一位数
按逆序输出是:7
请输入:100
100是三位数
按逆序输出是:
001

规律分析

  1. 位数判定

    • 一位数:0n90 \leq n \leq 9

    • 二位数:10n9910 \leq n \leq 99

    • 三位数:100n999100 \leq n \leq 999

    • 四位数:1000n99991000 \leq n \leq 9999

    • 五位数:10000n9999910000 \leq n \leq 99999

    更通用的方法是不断用 n /= 10 计数,直到 n == 0,计数即为位数。

  2. 逆序输出

    • 字符串法:转为字符串后倒序遍历;

    • 数学法:重复执行 n % 10 获取个位,然后 n /= 10,直到 n == 0

程序实现

import java.util.Scanner;

public class DigitReverse {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入一个不多于5位的正整数:");
        
        // 检查是否为有效整数输入
        if (!in.hasNextLong()) {
            System.out.println("Error: 输入不是整数,请重新运行程序。");
            return;
        }
        
        long num = in.nextLong();
        
        // 输入验证
        if (num < 0 || num >= 100000) {
            System.out.println("Error: 输入必须是非负且小于100000的整数。");
            return;
        }
        
        // 特殊处理 0
        if (num == 0) {
            System.out.println("0是一位数");
            System.out.println("按逆序输出是:0");
            return;
        }
        
        // 方法1:计算位数(数学法)
        long temp = num;
        int digits = 0;
        while (temp > 0) {
            digits++;
            temp /= 10;
        }
        System.out.println(num + "是" + digits + "位数");
        
        // 方法2:逆序输出(数学法)
        System.out.print("按逆序输出是:");
        temp = num;
        while (temp > 0) {
            System.out.print(temp % 10);
            temp /= 10;
        }
        System.out.println(); // 换行
    }
}

补充说明

  • 本题虽简单,但常用于编程入门训练,重点在于理解数字的十进制分解

  • 若允许前导零(如输入 00123),则需注意:Java 的 Scanner.nextLong() 会自动忽略前导零,读入为 123。若需保留原始格式,应读取字符串而非数字。