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; }