面试题12:打印1到最大的n位数

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/jingshuiliushen_zj/article/details/81981722

如输入3,输出1到999
注意,此题不能简单的用整型存储最大位数,因为可能会溢出,也就是说,我们需要考虑大数问题。

public static void print1ToN(int n){
        List<Integer> list=new ArrayList<>();
        //list的长度=n的值
        for(int i=0;i<n;i++){
            list.add(0);
        }
        int carryBit=0;//进位
        boolean end=false;//到达最大位数,退出循环
        while(true){
            /**
             * 每做一次list的遍历:
             * 1.每一位都要判断是否有进位,并用原本的数字+进位作为该位上的新的数字
               2.如果是最低位,则+1
               3.如果该位上的数字>9,向前进一位,当前位设为0
                     做完一次遍历,说明生成了一个新的数,输出。

                退出循环:最高位上的数字>9
             */
            for(int i=list.size()-1;i>=0;i--){
                int number=list.get(i)+carryBit;
                if(i==list.size()-1)
                    number+=1;
                if(number>9){
                    if(i==0)
                        end=true;
                    else{
                        number-=10;
                        carryBit=1;
                    }
                }else{
                    carryBit=0;
                }
                list.set(i, number);
            }
            if (end) {
                break;
            }
            output(list);
        }
    }
    /**
     * 输出list代表的数字,要从前往后找到第一个非0的数字开始输出。
     * @param list
     */
    public static void output(List<Integer> list){
        int i=0;
        while(i<list.size()){
            if(list.get(i)!=0)
                break;
            i++;
        }
        while(i<list.size()){
            System.out.print(list.get(i));
            i++;
        }
        System.out.println();
    }

第一轮for循环:
carrybit=0,i=2,digit=0,sum=0+0=0,sum=0+1=1,—->0 0 1
carrybit=0,i=1,digit=0,sum=0+0=0,—->0 0 1
carrybit=0,i=0,digit=0,sum=0+0=0,—->0 0 1

第二轮for循环:
carrybit=0,i=2,digit=0,sum=0+0=0,sum=1+1=2,—->0 0 2
…..
第10轮for循环:
carrybit=0,i=2,digit=0,sum=0+0=0,sum=9+1=10,sum=0,carrybit=1—->0 0 0
carrybit=1,i=1,digit=0,sum=0+1=1,—->0 1 0

猜你喜欢

转载自blog.csdn.net/jingshuiliushen_zj/article/details/81981722