您的位置:首页 > 职场人生

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

2014-03-26 18:49 302 查看
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。

说明:1.本题本质上是一个大数问题。

2.打印出习惯上的十进制数。

3.分析问题仍然是全集观念,且算法体现可读性和高效性。

public static void printToMaxDigitBitOf(int n) {
if (n <= 0) {
throw new IllegalArgumentException();
}
char[] number = initNumberStoreUpTo(n);
while (increase(number)) {
printNumber(number);
}

}
private static char[] initNumberStoreUpTo(int n) {
char[] number = new char
;
for (int i = 0; i < n; i++) {
number[i] = '0';
}
return number;
}

private static int charToDigit(char[] number, int currentBit) {
return number[currentBit] - '0';
}

private final static char[] tenDigits = {'0', '1', '2',
'3', '4', '5',
'6', '7', '8',
'9'};
private static boolean increase(char[] number) {
int lowBit = number.length - 1;
int highBit = 0;
int carryDigit = 0;
int bitSum = 0;
boolean canIncrease = false;
for (int i = lowBit; i >= highBit; i--) {
bitSum = (i != lowBit ? (charToDigit(number, i) + carryDigit) : (charToDigit(number, i) + 1));

if (bitSum < 10) {
number[i] = tenDigits[bitSum];
canIncrease = true;
break;
}

if ((bitSum >= 10) && (i != highBit)) {
number[i] = tenDigits[bitSum - 10];// may be have a problem ?
carryDigit = 1;
}

/*if ((bitSum >= 10) && (i == highBit)) {
canIncrease = false;
}*/
}
return canIncrease;
}

public static void printNumber(char[] number) {
boolean notZeroFound = false;
for (int i = 0; i < number.length; i++) {
if (number[i] != '0') {
notZeroFound = true;
}
if (notZeroFound) {
System.out.print(number[i]);
}
}
System.out.println();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: