码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-07-26 19:04:00      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:字符串   private   16px   strong   运算   pen   tostring   注意   size   

举个栗子:输入 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位数

标签:字符串   private   16px   strong   运算   pen   tostring   注意   size   

原文地址:https://www.cnblogs.com/jiezai/p/11252072.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!