面试题12:打印1到最大的n位数
2014-03-26 18:49
302 查看
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。
说明:1.本题本质上是一个大数问题。
2.打印出习惯上的十进制数。
3.分析问题仍然是全集观念,且算法体现可读性和高效性。
说明: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(); }
相关文章推荐
- (剑指Offer)面试题12:打印1到最大的n位数
- 面试题12打印1到最大的n位数
- 剑指offer-面试题12:打印1到最大的n位数
- 面试题12打印1到最大的n位数
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
- 剑指offer_面试题12_打印1到最大的n位数(大数问题)
- 面试题12:打印1到最大的n位数
- 面试题12 打印1到最大的N位数
- 剑指Offer面试题12[打印1到最大的n位数]
- 剑指Offer面试题12(Java版):打印1到最大的n位数
- Java之BigInteger(面试题12:打印1到最大的n位数)
- 面试题12: 打印1到最大的n位数(递归解法,全排列的递归解法)
- 【剑指Offer学习】【面试题12 :打印1 到最大的n 位数】
- 剑指Offer:面试题12——打印1到最大的n位数(java实现)
- 《剑指Offer》学习笔记--面试题12:打印1到最大的n位数
- 面试题12:打印1到最大的n位数
- 剑指offer面试题12 使用BigInteger来实现 打印1到最大的n位数
- 剑指offer之面试题12打印1到最大的n位数
- 面试题12:打印1到最大的n位数
- 面试题12:打印1到最大的n位数