这道题重点考察的就是我们的大数打印,因为如果按照普通的整形去循环打印的话,碰见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();}