您的位置:首页 > 其它

打印从1到最大的n位数.

2014-01-21 09:00 204 查看
输入数字n,按顺序从打印出从1到最大的n位十进制数.比如输入3,也就是最大的3位数是999,那么就打印1.2.3.---999;

方法1:非递归

#include "stdafx.h"
#include <iostream>
#include <exception>
using namespace std;
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)
{
printf("%c",number[i]);
}

}
printf("\t");
}
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 PrintToMaxOfNDigits(int n)
{
if(n<=0)
return;
char *number = new char[n+1];
memset(number,'0',n);
number
='\0';
while(!Increment(number))
{
PrintNumber(number);
}
delete []number;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n = 4;
PrintToMaxOfNDigits(n);
return 0;
}


方法2.递归法,全排列用递归表达,数字的每一位都可能是0-9中的一个数,然后设置下一位。递归结束的条件是我们已经设置了数字的最后一位.

#include "stdafx.h"
#include <iostream>
#include <exception>
using namespace std;
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)
{
printf("%c",number[i]);
}

}
printf("\t");
}
void Print1ToMaxOfNDigitsRecursively(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';
Print1ToMaxOfNDigitsRecursively(number,length,index+1);
}
}
void Print1ToMaxOfNDigits(int n)
{
if(n<=0)
return;
char* number = new char[n+1];
number
='\0';
for(int i = 0;i<10;++i)
{
number[0]=i+'0';
Print1ToMaxOfNDigitsRecursively(number,n,0);
}
delete[] number;

}
int _tmain(int argc, _TCHAR* argv[])
{
int n = 4;
Print1ToMaxOfNDigits(n);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: