输入一个int型数字n,输出从1到最长为n位的全部数字

题目:输入一个int型数字n,输出从1到最长为n位的全部数字。

代码参考了何海涛博客的代码。

主要点是,考虑数字超出了int型的最大表示范围该怎么办。这里不能直接用int型来表示。而是改用char数组,每一个char表示一位数字。

package yuesef;

public class TT {
	public static void main(String ss[]) {
		Print1ToMaxOfNDigits_3(3);
	}

	// 输出从1到长度为n的最大整数
	static void Print1ToMaxOfNDigits_3(int n) {
		// 0 or minus numbers are invalid input
		if (n <= 0)
			return;
		char[] number = new char[n];
		for (int i = 0; i < 10; ++i) {
			// first digit can be 0 to 9
			number[0] = (char) (i + 48); // 加48表示将int型的0-9转化为char
			Print1ToMaxOfNDigitsRecursively(number, n, 0);// number数组,数字总长度,当前处理的下标
		}
	}

	static void Print1ToMaxOfNDigitsRecursively(char[] number, int length,
			int index) {
		// 如果到达了要输出的数字长度,则输出数字
		if (index == length - 1) {
			PrintNumber(number);
			return;
		}

		for (int i = 0; i < 10; ++i) {
			// 当前下标的下一个数字,可能是从0-9
			number[index + 1] = (char) (i + 48);
			// 递归输出下一个数字
			Print1ToMaxOfNDigitsRecursively(number, length, index + 1);
		}
	}

	static void PrintNumber(char[] number) {
		boolean isBeginning0 = true;
		for (int i = 0; i < number.length; ++i) {
			if (isBeginning0 && number[i] != '0')
				isBeginning0 = false;
			if (!isBeginning0) {
				System.out.print(number[i]);
			}
		}
		System.out.println();
	}
}

PrintNumber函数去掉了char数组中的前导0。

你可能感兴趣的:(java语言)