《剑指offer》面试题17:打印从1到最大的n位数

来源:互联网 发布:打印机无法配置该端口 编辑:程序博客网 时间:2024/06/05 23:49

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

代码:
public class Print1toN {    //输进参数N,打印从1到最大的N位十进制数    public static void print1toMaxOfNDigits(int n) {        if (n<=0) {            System.out.println("参数必须是非负正整数");            return;        }        char [] numbers = new char[n];        //初始化字符数组        for (int i = 0; i < numbers.length; i++) {            numbers[i] = '0';        }        while (!arrayOutAfterAdd(numbers)) {            printNumber(numbers);        }        //System.out.println(numbers[n-1]);    }    private static void printNumber(char[] numbers) {        int j  = 0;        while (numbers[j] =='0') {            j++;        }        for (int i = j; i < numbers.length; i++) {                        System.out.print(numbers[i]);        }        System.out.println(" ");    }    private static boolean arrayOutAfterAdd(char[] numbers) {        // 当前字符数组加1后最前一位不会进位,返回true        boolean isOverFlow = false;        int nTakeOver = 0;        int length = numbers.length;        int nSum = 0;        for (int i = length-1; i >=0; i--) {            nSum = numbers[i]-'0' + nTakeOver;            if(i == length-1) {                nSum ++;            }            if (nSum >=10) {                if (i == 0) {                    isOverFlow = true;                                    }else{                    nTakeOver = 1;                    nSum -=10;                    numbers[i] = (char) ('0'+nSum);                }            }else{                numbers[i] = (char)('0'+nSum);                //既然不用进位,那么就可以跳出循环了,因为后面的位的数字均不用改变                break;            }                    }        return isOverFlow;    }    public static void main(String[] args) {        print1toMaxOfNDigits(3);    }}



阅读全文
0 0
原创粉丝点击