-
题目描述:
-
给定一个数字N,打印从1到最大的N位数。
-
输入:
-
每个输入文件仅包含一组测试样例。
对于每个测试案例,输入一个数字N(1<=N<=5)。
-
输出:
-
对应每个测试案例,依次打印从1到最大的N位数。
-
样例输入:
-
1
-
样例输出:
-
1 2 3 4 5 6 7 8 9
方案1:
void func(int n)
{
if(n<=0)
{
return;
}
int i = 0,max = 1;
while(i++ < n)
{
max *= 10;
}
for(i = 1; i < max; i++)
{
cout<<i<<endl;
}
}
很遗憾,这个方案不行,如果n太大的话,会溢出。(对于此题,虽然不溢出,但会超时)
方案2:--->通过
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
bool Increment(char *number)
{
bool isOverFlow = false;//溢出标志
int takeOver = 0;//进位
int len = strlen(number);
for(int i = len-1; i >= 0; i--)
{
int nsum = number[i] - '0' + takeOver;
if(i == len-1)//如果是个位
{
nsum++;
}
if(nsum >= 10)//产生进位
{
if(i == 0)//进位的是最高位
{
isOverFlow = true;
}else
{
nsum -= 10;
takeOver = 1;
number[i] = nsum+'0';
}
}else//没有进位
{
number[i] = nsum + '0';
break;
}
}
return isOverFlow;
}
void PrintNumber(char *number)
{
bool flag = true;
int i = 0;
while(number[i] != '\0')
{
if(flag && number[i] != '0')
{
flag = false;
}
if(!flag)
{
printf("%c",number[i]);
}
i++;
}
printf("\n");
}
void func(int n)
{
if(n<=0)
{
return;
}
char *number = (char *)malloc(sizeof(char) * (n+1));
if(!number)
{
return;
}
for(int i = 0; i < n; i++)
{
number[i] = '0';
}
number[n] = '\0';
while(!Increment(number))
{
PrintNumber(number);
}
free(number);
}
int main()
{
int n;
scanf("%d",&n);
func(n);
return 0;
}
方案3:---->通过
采用递归
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void PrintNumber(char *number)
{
bool flag = true;
int i = 0,count = 0;
while(number[i] != '\0')
{
if(number[i] == '0')
{
count++;
}
if(flag && number[i] != '0')
{
flag = false;
}
if(!flag)
{
printf("%c",number[i]);
}
i++;
}
if(count != strlen(number))
printf("\n");
}
void func1(char *number,int length,int index)
{
if(index == length - 1)
{
PrintNumber(number);
return;
}
for(int i = 0; i < 10; i++)
{
number[index+1] = '0' + i;
func1(number,length,index+1);
}
}
void func(int n)
{
if(n <= 0)
{
return;
}
char *number = (char*)malloc(sizeof(char)*(n+1));
if(!number)
{
return;
}
int i = 0;
for(i = 0; i < n; i++)
{
number[i] = '0';
}
number[n] = '\0';
for(i = 0; i < 10; i++)
{
number[0] = i+'0';
func1(number,n,0);
}
free(number);
}
int main()
{
int n;
scanf("%d",&n);
func(n);
return 0;
}