zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Dao层
    I/O流
    导入第三方jar包
    怎么使用log4j
    JDBC访问数据库的步骤
    抽象和封装
    JDBC中PreparedStatement接口提供的execute、executeQuery和executeUpdate之间的区别及用法
    ResultSet next方法
    实体类(entity)的作用
    接口的作用
  • 原文地址:https://www.cnblogs.com/jiezai/p/11252072.html
Copyright © 2011-2022 走看看