现在的位置: 首页 > 综合 > 正文

65 输出1 到最大的N 位数

2018年05月02日 ⁄ 综合 ⁄ 共 865字 ⁄ 字号 评论关闭

65.输出 1  到最大的 N  位数
题目:输入数字 n,按顺序输出从 1  最大的 n  位 10  进制数。比如输入 3,则输出 1、2、3 
一直到最大的 3  位数即 999。
分析:这是一道很有意思的题目。看起来很简单,其实里面却有不少的玄机。

/*
65.输出 1  到最大的 N  位数
题目:输入数字 n,按顺序输出从 1  最大的 n  位 10  进制数。比如输入 3,则输出 1、2、3 
一直到最大的 3  位数即 999。
分析:这是一道很有意思的题目。看起来很简单,其实里面却有不少的玄机。

递归 深搜 
*/

#include<iostream> 
#include<stdio.h>  
using namespace std;   
void print(char number[],int n)
{
	int i; 
	//去除前面的0 
	for(i=0;i<n;i++)
		if(number[i]!='0')
			break;
	if(i==n)
		return;
	for(;i<n;i++)
		printf("%c",number[i]);
	printf("\n");
}

void PrintRecursively(char number[],int index,int n)
{
	if(index==n)
	{
		print(number,n);
		return ;
	}
	for(int i=0;i<10;i++)
	{
		number[index]=i+'0';
		PrintRecursively(number,index+1,n);
	}	
}

void PrintToMaxOfNDigits(int n)
{
	if(n<=0)
        return;
    char *number=new char[n+1];
    memset(number,0,sizeof(number));
    number[n]='\0';
    PrintRecursively(number,0,n);
    delete[] number;
}
	
int main()   
{   
    int n;

    while(1)
    {
    	printf("input the number(0 end): \n");
		scanf("%d", &n);
		if(n==0) break;
    	PrintToMaxOfNDigits(n);	
    }
    return 0;   
}
【上篇】
【下篇】

抱歉!评论已关闭.