• 打印从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] != '')
    	{
    		if(flag && number[i] != '0')
    		{
    			flag = false;
    		}
    		if(!flag)
    		{
    			printf("%c",number[i]);
    		}
    		i++;
    	}
    	printf("
    ");
    }
    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] = '';
    	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] != '')
    	{
    		if(number[i] == '0')
    		{
    			count++;
    		}
    		if(flag && number[i] != '0')
    		{
    			flag = false;
    		}
    		if(!flag)
    		{
    			printf("%c",number[i]);
    		}
    		i++;
    	}
    	if(count != strlen(number))
    		printf("
    ");
    }
    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] = '';
    	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;
    }





  • 相关阅读:
    SpringBoot详解(二)——
    SpringBoot详解(一)——
    数据库三大范式
    Mysql备份
    mysql索引
    mysql事务
    几种数据库查找的案例
    点击加载更多
    layer、弹出框
    验证码倒计时
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7029151.html
Copyright © 2020-2023  润新知