这道题重点考察的就是我们的大数打印,因为如果按照普通的整形去循环打印的话,碰见n=10的情况下就会超出整形的范围了,所以我们使用字符串进行打印,确切的说是使用字符进行打印,代码如下所示:
public static void printNumDigits( int n){
if (n<1){
return;
}
char[] number = new char[n];
printDiverseNumDigits(number,0);
}
private static void printDiverseNumDigits(char[] number, int digit) {
if (digit==number.length){ // 这块比较重要,是递归的推出条件
printNumber(number);
return;
}
for (int i = 0; i < 10; i++) {
number[digit] = (char) (i +'0'); // 这块就是固定高位,然后让下面的低位先去顺序打印
printDiverseNumDigits(number,digit+1);
}
}
private static void printNumber(char[] number) {
int index = 0;
while (index<number.length && number[index]=='0'){
index++;
}
while (index<number.length){
System.out.print(number[index++]); // 因为是char,所以不换行打印
}
System.out.println();
}