#include <iostream>
#include <cmath>
using namespace std;
void Print1ToN_1(int n) //存在溢出的可能
{
int max = pow(10,n);
for(int i = 1 ;i < max; ++i)
{
cout<<i<<" ";
}
}
bool Plus1EveryTime(char *num,int n)
{
int JinWei = 0;
int sum = 0;
bool flag = true; //用来标志是否到达最大值
for(int i = n-1;i >=0; --i)
{
sum = num[i] - '0' + JinWei;
JinWei = 0;
if(i == n-1)sum++;//每次的加1操作
if(sum >= 10)
{
if(i == 0)
{
flag =false;
break;
}
sum -= 10;
num[i] = sum + '0';
JinWei = 1;
}
else
{
num[i] = sum + '0';
break;
}
}
return flag;
}
void MyPrint(char * num,int n)
{
int pos = 0;
while(num[pos] == '0')pos++;
if(pos == n)return;
for(int i = pos ; i < n;++i)
{
cout<<num[i];
}
cout<<" ";
}
void Print1ToN_2(int n) //大数相加的思想
{
char * num = new char[n+1];
memset(num,'0',n);
num[n] = '\0';
while(Plus1EveryTime(num,n))
{
MyPrint(num,n);
}
delete [] num;
}
void Permutation(char * num ,int length,int index)
{
if(index == length-1) //递归出口
{
MyPrint(num,length);
return;
}
else
{
for(int i = 0 ;i < 10;++i)
{
num[index+1] = i + '0';
Permutation(num,length,index+1);
}
}
}
void Print1ToN_3(int n)
{
if(n <= 0)return;
char * num = new char[n+1];
memset(num,'0',n);
num[n] = '\0';
for(int i = 0; i < 10;++i)
{
num[0] = i + '0';
Permutation(num,n,0);
}
delete [] num;
}
int main()
{
int n;
while(cin>>n)
{
Print1ToN_3(n);
cout<<endl;
}
return 0;
}
打印从1到n的数
最新推荐文章于 2022-03-10 09:40:46 发布