/* 12.打印1到最大的n位数 ,给 3 ,打出1,2,3,.....999 数字转换成字符集合的全排列问题,前面为0的不打出来 解决了n比较大 溢出的问题 */ //098->98 void printnum(char* num) { int flag = false;//默认开头有‘0’ int len = strlen(num); for (int i = 0; i < len; ++i) { if (!flag && num[i] != '0') flag = true; if (flag) cout << num[i]; } cout << endl; } void printOneToMaxdigitRec(char*number, int length, int index) { if (index == length - 1)//遍历到数组的最后一位,打印返回 { printnum(number); return; } for (int i = 0; i < 10; ++i) { number[index + 1] = i + '0'; //下一位set 0~9 printOneToMaxdigitRec(number, length, index + 1);//递归设置 } } void printMaxdigit(int n) { if (n <= 0) return; char* number = new char[n + 1];//'\0' number[n] = '\0'; for (int i = 0; i < 10; ++i) { number[0] = i + '0'; //设置首位从0~9 printOneToMaxdigitRec(number,n,0); //递归打印不同首位的全排列 } delete[]number; }