输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3

/***********************************************************************************************
*文件名称:lx6
*创建者:
*创建时间:2014/6/20
*文件说明:输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3
*					 一直到最大的3位数即999。
***********************************************************************************************/
#include 
    
    
     
     
#include 
     
     
      
      
#include 
      
      
       
       
#include 
       
       
        
        
int n;

/************************************************************************************************
*定义的子函数
************************************************************************************************/
void Solution1(void);
bool Solution2(char *numberstring);
void Solution3(int n);
void Print1ToMAX(int n);
void Print1ToMAXRecursively(char *numstr,int length,int index);
void PrintNumber(char *numstr);

/************************************************************************************************
*函数名称:Solution1
*函数参数:void
*返回值类型:void
*函数功能:按顺序输出1~10n-1(n为上标)的数字
************************************************************************************************/
void Solution1(void)
{
	double max;
	int i;
	max=pow(10.0,n)-1;							/*求出n位整数的最大值*/
	for(i=1;i<=(int)max;i++)					/*依次打印出1到最大的n位数 */
	{
		printf("%d ", i);
		if(i%15==0)
			printf("\n");
	}
}
/************************************************************************************************
*函数名称:Increment1
*函数参数:numberstring
*返回值类型:bool
*函数功能:在字符串上模拟加法,每次加的数值为1
************************************************************************************************/
bool Increment1(char *numberstring)
{
	bool isOverflow = false;
	int i;
	int TakeOver = 0;																		/*进位*/
	int Length = strlen(numberstring);											/*求出整数字符串的长度+1*/
	int SumBit ;																					/*求出某一位的数值*/
	for(i=Length-1;i>=0;i--)
	{
		SumBit = numberstring[i]-'0'+TakeOver;							/*将字符型数值转换成整型数值*/
		if (i==Length-1)
			SumBit++;
		if (SumBit >= 10)
		{
			if(i==0)
				isOverflow = true;															/*如果最高位的数值大于9,则满足循环结束的条件*/
			else
			{
				TakeOver = 1;																	/*如果不满足结束条件,则需要向高一位进1*/
				numberstring[i]=SumBit-10+'0';									/*同时修改该位的值,并转化成字符串存储*/
			}
		}
		else
		{
				numberstring[i]=SumBit+'0';				
				break;																				/*第i位的值不大于9时,存储后退出循环*/
		}
	}
	return isOverflow;
}
/************************************************************************************************
*函数名称:Solution2
*函数参数:n
*返回值类型:void
*函数功能:分配内存空间,在字符串上模拟加法,并打印输出结果
************************************************************************************************/
void Solution2(int n)
{
	char *numberstring;
	numberstring = (char *)malloc((n+1)*sizeof(char));			/*分配n+1个char类型的内存空间*/
	if(n<0)
			return ;								                                                 /*如果n小于0,则直接返回*/
	memset(numberstring, '0', n);													 /*将分配的内存块清零*/
	numberstring[n] = '\0';
	while(!Increment1(numberstring))
		PrintNumber(numberstring);
	free(numberstring);																	 /*释放分配的内存空间*/
}
/************************************************************************************************
*函数名称:Solution3
*函数参数:n
*返回值类型:void
*函数功能:分配内存空间,递归调用,打印1到最大的n位数 
************************************************************************************************/
void Solution3(int n)
{
	int i;
	char *numberstring;
	numberstring = (char *)malloc((n+1)*sizeof(char));			/*分配n+1个char类型的字符块*/
	if(n<=0)
		return ;								                                                    /*如果n小于0,则直接返回*/
	memset(numberstring, '0', n);												    /*将分配的内存块清零*/
	numberstring[n] = '\0';
	for(i=0;i<10;i++)
	{
		numberstring[0]= i+'0';
		Print1ToMAXRecursively(numberstring,n,0);
	}
	free(numberstring);
}
/************************************************************************************************
*函数名称:Print1ToMAXRecursively
*函数参数:numstr,  length,  index
*返回值类型:void
*函数功能:递归调用,求出除最高位外剩余位数的值,并打印输出求得的值
************************************************************************************************/
void Print1ToMAXRecursively(char *numstr,int length,int index)
{
	int i;
	if(index == length-1)
	{
		PrintNumber(numstr);
		return ;
	}
	for(i=0;i<10;i++)
	{
		numstr[index+1] = i+'0';
		Print1ToMAXRecursively(numstr,length,index+1);
	}
}
/************************************************************************************************
*函数名称:PrintNumber
*函数参数:numstr
*返回值类型:void
*函数功能:打印输出数值,高位的0不打印出来
************************************************************************************************/
void PrintNumber(char *numstr)/*输出时高位的0不打印出来*/
{
	int isHead = 1;
	int Length = strlen(numstr);
	for(int i = 0; i
        
        
       
       
      
      
     
     
    
    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值