java输入一个整数N,打印1~n位数

Posted jiezai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java输入一个整数N,打印1~n位数相关的知识,希望对你有一定的参考价值。

举个栗子:输入 3 ; 打印1,2,3......999

这里要注意一个坑,不可以直接算出最大的数,然后从1开始打印 。因为当n足够大时,n位数必定会超出int范围和long范围

所以我们需要用字符串来解题 , 模拟加法运算,循环打印。

思路:

1.先将n位数最大的一项+1用字符串str标记

2.StringBuilder对象ans用来做加法运算以及打印操作

3.boolean类型flag 用来标记是否需要进位

4.每次都从ans最后一位开始+1,需要进位时,将此时i的位置值为0,紧接着判断它的前一位置的字符是否+1需要进位,如果加一不需要进位,直接+1,break即可,否则继续循环下去。对于99这类数+1后,字符已经遍历完,flag为true,需要给ans 0号位置插入1 。

5.当ans和str的值相等时,循环结束

 

代码实现:

    public static void main(String[] args) 
        getMums(3);
    
    //flag用来判断需不需要进位
    static boolean flag;
    private static void getMums(int n) 
        //str 用来保存最大的数,作为结束循环的条件
        StringBuilder str = new StringBuilder();
        str.append(1);
        while (n != 0) 
            str.append(0);
            n--;
        

        StringBuilder ans = new StringBuilder();
        ans.append(1);
        //ans字符串累加操作
        while (!ans.toString().equals(str.toString())) 
            System.out.println(ans);
            //加一的判断
            for (int i = ans.length() - 1; i >= 0; i--) 
                //涉及进位
                if (ans.charAt(i) == ‘9‘) 
                    ans.replace(i, i + 1, "0");
                    flag = true;
                    continue;
                 else 
                    //找到累加的位置
                    ans.replace(i, i + 1, Integer.toString((ans.charAt(i) - ‘0‘ + 1)));
                    flag = false;
                    break;
                
            
            //当数字类似于 99  999 时,头部插入1.
            if (flag == true) 
                ans.insert(0, 1);
            
            //结束条件
            if (str.toString().equals(ans.toString())) 
                return;
            
        
    

结果:

1
2
3
...
998
999

 

以上是关于java输入一个整数N,打印1~n位数的主要内容,如果未能解决你的问题,请参考以下文章

Offer[17] 打印1到最大的n位数

剑指 Offer 17. 打印从1到最大的n位数 的详细题解

剑指 Offer 17. 打印从1到最大的n位数

剑指 Offer 17. 打印从1到最大的n位数

Leetcode——打印从1到最大的n位数

[LeetCode]剑指 Offer 17. 打印从1到最大的n位数