打印从1到最大的n位数

bool Increment(char* number){
bool isOverflow = false;
int nTakeOver = 0;
int nLength = strlen(number);
for(int i=nLength-1;i>=0;i--){
int nSum = number[i]-'0'+nTakeOver;
if(i==nLength-1)
nSum++;
if(nSum>=10)
{
if(i==0)
isOverflow = true;
else {
nSum -=10;
nTakeOver = 1;
number[i] = '0'+nSum;
}
}
else
{
number[i]='0'+nSum;
break;
}
}
return isOverflow;
}
void printNumber(char* number)
{
bool isBeginning0 = true;
int nLength =strlen(number);
for(int i=0;i<nLength;++i)
{
if(isBeginning0&&number[i]!='0')
isBeginning0= false;
if(!isBeginning0)
cout<<number[i];
}
cout<<"\t";
}
void print1ToMax(int n)
{
if(n<=0)
return;
char * number = new char[n+1];
memset(number,'0',n);
number[n]='\0';
while(!Increment(number)){
printNumber(number);
}
delete []number;
}
void printTomaxRecursively(char* number,int length,int index){ //全排列递归解决
if(index==length-1){
printNumber(number);
return;
}
for(int i=0;i<10;i++){
number[index+1]=i+'0';
printTomaxRecursively(number,length,index+1);
}
}
void print2ToMax(int n){
if(n<=0)
return;
char* number = new char[n+1];
number[n]='\0';
for(int i=0;i<10;++i){
number[0]=i+'0';
printTomaxRecursively(number,n,0);
}
delete[] number;
}

转载于:https://www.cnblogs.com/XiaoXiaMi123/p/8660031.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值