题目描述:输入数字n,按顺序打印从到最大的n位十进制数。
题目分析:1、要考虑大数的情况;2、可以用两种方式解决这个问题,一种是字符串,从低位依次加1,遇9进位,另一种是递归,每位的情况都是0-9,从高位开始递归;
代码分析:
#include<iostream>
using namespace std;
//第一种方法:用字符串的方式,依次从低位加,每次加1,遇到9就进位。
void Show(char *s) //打印,从第一个非0数字开始打印。
{
int len = strlen(s);
int i = 0;
while(s[i] == '0')
{
s++;
}
cout<<s<<" ";
}
void ShowNumber(int num) //打印函数
{
char* s = new char[num+1];
memset(s,'0',num);
s[num] = 0;
int index = 0;
s[num-1] = '1'; //先置成1
Show(s);
while(index < num && index >= 0)
{
index = num-1;//从末尾开始
while(s[index] < '9')//从低位开始,依次加1
{
s[index] += 1;
Show(s);
}
while(index >= 0 && s[index] == '9')//遇到9,就进位
{
s[index--] = '0';
}
if(index >= 0)
{
s[index] += 1; //最高位加1
}
}
delete[] s;
}
//第二种方法,位数的全排列组合,并打印;
void PrintNum(char *s,int n,int pos)
{
if(pos == n-1)
{
Show(s);
return;
}
for(int i=0;i<10;++i)
{
s[pos+1] = i + '0';
PrintNum(s,n,pos+1);
}
}
void Print(int n)
{
char *s = new char[n+1];
memset(s,'0',n);
s[n] = 0;
for(int i=0;i<10;++i)
{
s[0] = i + '0';
PrintNum(s,n,0);
}
}
int main()
{
int num = 0;
cin>>num;
//ShowNumber(num);
Print(num);
return 0;
}