先将正确解题代码奉上。
```
#include <iostream>
using namespace std;
// length: n位数
// number: n+1位的数组(字符串)
// numberIndex: 高位的位数在number中的下标值
void print1ToMax(int length, char* number, int numberIndex) {
// 已设置的数字位数已经到达length限制 则完成一个数字 打印
// 例如 3位数 则可用number[0][1][2]
if(numberIndex == length - 1) {
cout << number << endl;
return ;
}
/*
// char* number = new char[length + 1];后创建的是NULL数组 NULL=='\0'不能用来判断
if(number[numberIndex + 1] == '\0') {
cout << number << endl;
return ;
} */
// 低位的循环结束后返回高位的循环 高位i++后继续进入低位 再次开启循环
for(int i = 0; i < 10; i++) {
number[numberIndex + 1] = i + '0';
print1ToMax(length, number, numberIndex + 1);
}
}
int main()
{
int length = 3;
char* number = new char[length + 1];
number[length] = '\0';
// 最高位 在number[0]
for(int i = 0; i < 10; i++) {
number[0] = i + '0';
print1ToMax(length, number, 0);
}
delete[] number;
return 0;
}
```
不考虑大数
```
#include <iostream>
#include "math.h"
using namespace std;
int main()
{
int n = 3; // 10*10*10-1 = 999
int limitNum = 0;
int digitNum = 0;
limitNum = 1;
while(digitNum < n) {
limitNum *= 10;
digitNum++;
}
limitNum--;
/*
--n;
while(n >= 0){
digitNum = 9 * pow(10,n);
limitNum += digitNum;
n--;
}*/
cout << limitNum << endl;
int num = 1;
while(num <= limitNum) {
cout << num << endl;
num++;
}
return 0;
}
```