打印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 }