输入数字n,按顺序打印出从1到最大的n位进制数。
比如输入3,则打印1,2,3 一直到最大的3位数即999
void PrintNum(char *num)
{
bool isBegin = true;
int nlen = strlen(num);
for(int i=0;i<nlen;++i)
{
if(isBegin && num[i] != '0')
isBegin = false;
if(!isBegin )
{
printf("%c",num[i]);
}
}
printf("\t");
}
bool Increment(char *num)
{
bool isOverflow = false;
int nTakeOver = 0;
int nlen = strlen(num);
for(int i = nlen-1;i>=0;i--)
{
int nsum = num[i] - '0' +nTakeOver;
if(i == nlen - 1)
nsum++;
if(nsum >= 10)
{
if(i == 0)
isOverflow = true;
else
{
nsum -= 10;
nTakeOver = 1;
num[i] = '0' + nsum;
}
}
else
{
num[i] = '0' + nsum;
break;
}
}
return isOverflow;
}
void Print1(int n)
{
if(n <= 0)
return;
char *num = new char[n+1];
memset(num,'0',n);
num[n] = '\0';
while(!Increment(num))
{
PrintNum(num);
}
delete [] num;
}
void PrintRecursive(char *num,int len,int index)
{
if(index == len -1 )
{
PrintNum(num);
return;
}
for(int i=0;i<10;i++)
{
num[index+1] = i + '0';
PrintRecursive(num,len, index+1);
}
}
void Print2(int n)
{
if(n <= 0)
return;
char *num = new char[n+1];
num[n] = '\0';
for(int i =0;i<10;i++)
{
num[0] = i+ '0';
PrintRecursive(num,n,0);
}
delete[] num;
}
void Test(int n)
{
printf("test for %d begin\n",n);
Print1(n);
Print2(n);
printf("test for %d end\n",n);
}
int main()
{
Test(1);
Test(2);
Test(3);
Test(0);
Test(-1);
return 0;
}