题目描述
输入数字n,打印从1到最大n位数的十进制
//实现在字符串上+1
//注意字符串右到左 n->0
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 ++;//最低位+1
}
if(nSum >= 10)
{
if(i == 0) isOverflow = true;
else
{
nSum = nSum - 10;
nTakeOver = 1;
number[i] = nSum + '0';
}
}
else
{
number[i] = nSum + '0';
break;
}
}
return isOverflow;
}
void PrintNumber(char *number)
{
int nLength = strlen(number);
int start = false;
for(int i=0; i<nLength; i++)
{
if(number[i]!='0' && !start )
{
start = true;
}
if(start)
{
cout<<number[i];
}
}
}
void PrintMaxN(int n)
{
if(n<=0) throw "Wrong Valid";
char *number = new char[n+1];
memset(number, '0', n);
number[n] = '\0';
while(!Increment(number))
{
PrintNumber(number);
cout<<" ";
}
cout<<end;
}
高效解法
n个从0-9的全排列
由主函数控制第一位(最高位)0-9输出,内部递归,每次固定最后一位则输出,其他从右到左递归排列