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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM