剑指offer_12(打印出从1到最大n位数)

来源:互联网 发布:模具编程软件 编辑:程序博客网 时间:2024/06/06 12:42

题意:给定一个整数n,打印出从1到最大n位数。
思路:一般解法很简单,但是基于效率考虑,选择位运算来解答。
代码:

package MianShiTi_12;public class MianShiTi_12 {    public static  boolean isOverflow(int[] number) throws Exception {        if(number.length < 1){            throw new Exception("invalid length of number");        }        boolean isOverflow = false;        //进位        int carry = 0;        for(int i = number.length - 1; i >= 0 ;i--){            int sum = number[i] + carry;            if(i == number.length - 1){                sum++;            }            if(sum >9 ){                if(i == 0){                    isOverflow = true;                }else{                    carry = 1;                    number[i] = 0;                    sum = 0;                }            }else{                number[i] = sum;                break;            }        }        return isOverflow;    }    public static void print(int[] number) {        boolean isBegining = true;        for(int i = 0; i< number.length ; i++){            if(isBegining && number[i] != 0){                isBegining = false;            }            if(!isBegining){                System.out.println(number[i]);            }        }    }    public static void main(String [] args) throws Exception {        int[] number = new int[3];        while(!isOverflow(number)){            print(number);            System.out.println();        }    }}
0 0