68. 打印1到最大的N位数

本文提供两种方法实现打印从1到最大的N位数:一是使用数组进行位操作,二是利用BigDecimal类处理大数运算。通过递归和循环控制,实现了对任意位数数字的遍历与打印。


其实是考察大数问题问题

1. 借助数组

/**
 * @Classname Solution
 * @Description 打印1到最大的N位数
 * @Date 2019/12/23 7:55
 * @Author Cheng
 */
public class Solution {
    public static void printOneToNthDigits(int n) {
        // 输入的数字不能为小于1
        if (n < 1) {
            throw new RuntimeException("The input number must larger than 0");
        }

        int[] arr = new int[n];
        // 分别对每一位赋值0-9
        changeValueOfIndex(arr, 0);
    }

    private static void changeValueOfIndex(int[] arr, int index) {
        if (index >= arr.length) {
            printArray(arr);
            return;
        }

        for (int i = 0; i <= 9; i++) {
            arr[index] = i;
            changeValueOfIndex(arr,index+1);
        }

    }

    public static void printArray(int[] nums) {
        boolean flag = false;
        StringBuilder ret = new StringBuilder();
        for (int val : nums) {
            if (val != 0) {
                flag = true;
            }
            if (flag) {
                ret.append(val);
            }
        }
        System.out.println(ret.length()==0?0:ret.toString());
    }
}

2. 借助BigDecimal类

/**
 * @Classname Solution
 * @Description 打印1到最大的N位数
 * @Date 2019/12/23 7:55
 * @Author Cheng
 */
public class Solution {
    public static void printOneToNthDigits(int n) {
        // 输入的数字不能为小于1
        if (n < 1) {
            throw new RuntimeException("The input number must larger than 0");
        }

        String numStr = "";
        for (int i = 0; i < n; i++) {
            numStr+=9;
        }
        BigDecimal end = new BigDecimal(numStr);
        BigDecimal begin = new BigDecimal(0);
        BigDecimal one = new BigDecimal(1);
        while (begin.compareTo(end) <= 0) {
            System.out.println(begin.toString());
            begin = begin.add(one);
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山与长生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值