首页 > 代码库 > 打印从1到最大的n位数

打印从1到最大的n位数

题目描述:

给定一个数字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;
}