打印1到n最大的n位数

来源:互联网 发布:拳皇14键盘优化 编辑:程序博客网 时间:2024/05/19 18:00
  1 /*
  2     输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数即999
  3 */
  4
  5 //如果初看的话很容易认为题目非常简单,用一个循环喀什逐个打印就可以。但是仔细分析这个问题,我们就可以知道并么有规定n的范>    围。当输入 n很大的时候,我们求最大的n位数用long long都会溢出,也就是考虑大数问题

  6

  7 #include<iostream>  8 #include<string.h>  9 using namespace std; 10 11 void Print1ToMaxofNDigitsRecursively(char* number,int length,int index); 12 void PrintNumber(char* number); 13 14 //打印1到n位的所有十进制数 15 void Print1ToMaxofNDigits(int n) 16 { 17     if(n < 0) 18         return; 19     char* number = new char[n+1]; 20     number[n] = '\0'; 21 22     for(int i = 0; i < 10; ++i) 23     { 24         number[0] = i + '0'; 25         Print1ToMaxofNDigitsRecursively(number,n,0); 26     } 27     delete []number; 28 } 29 30 //递归结束的条件是已经设置了最后一位 31 void Print1ToMaxofNDigitsRecursively(char* number,int length,int index) 32 { 33     if(index == length -1) 34     { 35         PrintNumber(number); 36         return; 37     } 38 39     for(int i = 0; i < 10; ++i) 40     { 41         number[index+1] = i  + '0'; 42         Print1ToMaxofNDigitsRecursively(number,length,index+1); 43     } 44 } 45 46 //打印函数 不打印开头为0的数 47 void PrintNumber(char* number) 48 { 49     bool isBeginning0 = true; 50     int nLength = strlen(number); 51 52     for(int i = 0; i < nLength; ++i) 53     { 54         if(isBeginning0 && number[i] != '0') 55             isBeginning0 = false; 56 57         if(!isBeginning0) 58         { 59             printf("%c",number[i]); 60         } 61     } 62     printf("\t"); 63 64 } 65 66 int main() 67 { 68     cout<<"please input a number"<<endl; 69     int n; 70     cin>>n; 71     Print1ToMaxofNDigits(n); 72     return 0; 73 }


原创粉丝点击