题目描述:
输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数999.
分析:注意不能直接输入最大的n位十进制数,因为可能属于大数,这个数无法用int或者long long存储,因此需要用字符串表示。
思路:我们用n位全排列解法,每一位都可以是0~9的数。利用递归解法。需要注意的是前导0不要输出,比如一位的时候只打印1-9, 2位的时候打印1-9(而不是01、···)、10-99.
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index); 7 8 void PrintNumber(char* number) { 9 int index = 0; 10 bool isBeginning0 = true; 11 int nlength = strlen(number); 12 //索引到左边第一位不为0的下标。特别注意的是整个字符串全为0的情况 13 for (int i = 0; i < nlength; i++) { 14 if (number[i] != '0') { 15 index = i; 16 break; 17 } 18 } 19 if (!(index == 0 && number[index] == '0')) { 20 for (int i = index; i < nlength; i++) { 21 printf("%c", number[i]); 22 } 23 printf(" "); 24 } 25 } 26 27 void Print1ToMaxOfNDigits(int n) { 28 if (n <= 0) { 29 return; 30 } 31 char *number = new char[n + 1]; 32 number[n] = '