码迷,mamicode.com
首页 > 其他好文 > 详细

打印1到最大的n位数

时间:2015-04-14 19:46:07      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

    题目:输入数字n,按顺序打印从1到最大的n位十进制数,比如输入3,就打印从1到999.

    分析:首先不可能定义int型的数,当输入的n稍微大一点就溢出了,所以一般要考虑用字符串模拟数字的解法。我们一共用了三个函数,第一个函数print用来打印某一个数字,Increment用来自增,但是要加上防溢出的机制,printMaxDigit是实现函数。总的代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void print(char *number)//打印某一个数字的函数
{
	int len=strlen(number);//我们要判断首字母是否为0
	bool isbeginning0=true;
	for(int i=0;i<len;i++)
	{
		if(isbeginning0&&number[i] != '0')
			isbeginning0=false;
		if(!isbeginning0)//字母为0的就不用打印,为了照顾我们的数字习惯
			printf("%c",number[i]);
	}
	printf("\t");
}
bool Increment(char *number)//自增的函数,每次加1
{
	bool isflow=false;//判断是否溢出
	int len=strlen(number);
	int take=0;
	for(int i=len-1;i>=0;i--)
	{
		int nsum=number[i]-'0'+take;//取出当前位的数
		if(i==len-1)
			nsum++;
		if(nsum>=10)
		{
			if(i==0)//溢出
				isflow=true;
			else
			{
				nsum-=10;
				take=1;
				number[i]='0'+nsum;
			}
		}
		else
		{
			number[i]='0'+nsum;
			break;
		}
	}
	return isflow;
}
void printMaxDigit(int n)//判断
{
	if(n<0)
		return;
	char *number=(char *)malloc(sizeof(char)*(n+1)); //申请n+1个空间,留一个用来进位
	memset(number,'0',n);//全部初始化
	number[n]='\0';//最后一位结束
	while(!Increment(number))//自增
	{
		print(number);//打印出对应的数字
	}
	free(number);
}
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		printMaxDigit(n);
		printf("\n");
	}
	return 0;
}

打印1到最大的n位数

标签:

原文地址:http://blog.csdn.net/zyh920521/article/details/45046365

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!