/*
题目:
输入数字n,按顺序打印从1到最大的n位十进制数。
如输入3,打印从1,2,3到999。
*/
/*
思路:
大数问题转化为字符串或数组。
*/
#include<iostream>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stdio.h>
using namespace std;
bool Increment(char* numbers,int n){
for(int i = n-1; i >= 0; i--){
if(numbers[i] < '9'){
numbers[i] += 1;
return true;
}else{
numbers[i] = '0';
}
}
if(numbers[0] == '0') return false;
return true;
}
void PrintNumbers(char* numbers,int n){
int i = 0;
while(numbers[i] == '0'){
i++;
}
for(int j = i; j < n; j++){
printf("%c",numbers[j]);
}
printf("\n");
}
void PrintToMaxOfDigits(int n){
if(n <= 0) return;
char* numbers = new char[n+1];
memset(numbers,'0',n);
numbers[n] = '\0';
while(Increment(numbers,n)){
PrintNumbers(numbers,n);
}
delete[] numbers;
}
int main(){
PrintToMaxOfDigits(3);
}