打印1到最大的n位数

 1 // Type your C++ code and click the "Run Code" button!
 2 // Your code output will be shown on the left.
 3 // Click on the "Show input" button to enter input data to be read (from stdin).
 4 
 5 #include <iostream>
 6 using namespace std;
 7 
 8 /*字符串里的数字增1*/
 9 bool Increment( char * number )
10 {
11     
12     if( number== NULL)
13     {
14         return false;
15     }
16     
17     int index = strlen( number )-1;
18 
19     
20     while( index >= 0 )
21     {
22         if( number[index] != '9' )
23         {
24             int tmp = number[index] - '0' + 1;
25             number[index] = tmp + '0';
26             return true;
27         }
28         else
29         {
30             number[index--] = '0';
31         }
32     }
33 
34     return false;
35 }
36 
37 /*打印出字符串里的数字*/
38 void PrintNum(char * number)
39 {
40     
41     int index=0;
42     
43     while(number[index] != '\0')
44     {
45         if( number[index] != '0')
46         {
47             
48             cout<<&number[index]<<endl;
49             return;
50             
51         }
52 
53          
54         index++;
55     }
56     
57 }
58 
59 /*打印1到最大n位数*/
60 void PrintNdigits( int n)
61 {
62     if( n <= 0 )
63     {
64         return;
65     }
66         
67     char * number = new char[ n+1 ];
68     memset( number,'0',n);
69     number[n]='\0';
70 
71     while( Increment(number))
72     {
73         PrintNum(number);
74     }
75     delete[]number;
76 }
77 
78 int main() {
79     // Start typing your code here...
80     cout << "Hello world!" << endl;
81     
82     PrintNdigits(3);
83     system("pause");
84     return 0;
85 }

 由于n很能超过int和long long类型范围,所以使用字符串来表示数字;

递归实现

 1 #include <iostream>
 2 using namespace std;
 3 //数字上的每位取值0到9
 4 
 5 /*打印出字符串里的数字*/
 6 void PrintNum(char * number)
 7 {
 8     
 9     int index=0;
10     
11     while(number[index] != '\0')
12     {
13         if( number[index] != '0')
14         {
15             cout<<&number[index]<<endl;
16             return;
17         }
18         index++;
19     }
20     
21 }
22 /*递归实现*/
23 void Recursion( char * number, int length, int index )
24 {
25     if( index == length-1 )
26     {
27         PrintNum(number);
28         return;
29     }
30 
31     for( int i = 0 ;i < 10 ;i++ )
32     {
33         number[index + 1]= i+'0';
34         Recursion(number,length,index+1 );
35     }
36 }
37 
38 /*打印1到最大n位数*/
39 void PrintNdigits( int n)
40 {
41     if( n <= 0 )
42     {
43         return;
44     }
45         
46     char * number = new char[ n+1 ];
47     number[n]='\0';
48 
49     for( int i = 0; i < 10 ;i++ )
50     {
51         number[0]=i + '0';
52         Recursion(number,n,0);
53     }
54     
55     delete[]number;
56 }
57 
58 int main() {
59     
60     PrintNdigits(3);
61     system("pause");
62     return 0;
63 }

 

posted @ 2013-07-20 16:03  NinaGood  阅读(205)  评论(0编辑  收藏  举报