题目要求:
输入数字n,按顺序输出从1到最大的n位10进制数。
例如,输入3,则输出1、2、3...、999(最大的3位数)。
参考资料:剑指offer第12题。
题目分析:
如果我们在数字前面补0的话,就会发现n位所有十进制数其实就是n个从0到9的全排列。也就是说,我们把数字的每一位都从0到9排列一遍,就得到了所有的十进制数。只是我们打印的时候,数字排在前面的0我们不打印出来而已。
代码实现:
#include <iostream> using namespace std; const int N = 4; void PrintToMaxOfNDigits(int n); int main(void) { cout << "打印1到最大的 " << N <<" 位数:" << endl; PrintToMaxOfNDigits(N); cout << endl; return 0; } void Print(char *num) { bool isBeginning = true; int len = strlen(num); for(int i = 0;i<len;i++) { if(isBeginning && num[i] != '0') isBeginning = false; if(!isBeginning) cout << num[i]; } cout << " "; } void PrintCore(char *num,int len,int index) { if(index == len-1) { Print(num); return; } for(int i=0;i<10;i++) { num[index+1] = i+'0'; PrintCore(num,len,index+1); } } void PrintToMaxOfNDigits(int n) { if(n <= 0) return; char *num = new char[n+1]; num[n] = '