1から印刷すると、安全の提供をビットNの最大数を証明します

件名の説明:

数nは、1からnビットの小数ために最大の印刷を入力してください。例えば、入力3、次いで1、2、3桁999の最大までプリントアウト。

 

分析:多数に属することができるように、直接、最大Nビットの10進数を入力することができないことに注意してください、この数は、したがって、文字列または長いlong int型のストレージを表すために必要とすることができません。

 

アイデア:我々は、すべてのNビットの溶液に整列され、各ビットは、0から9までの数とすることができます。再帰的なソリューションを提供します。先頭の0は、プリントとして出力しないように注意した場合にのみ1-9、1-9 2印刷(代わりに01の、...)、10-99。

 

1の#include <iostreamの>
 2の#include <アルゴリズム> 
 3の#include <cstdioを>
 4の#include <CStringの>
 5  使って 名前空間STD。
6  ボイド Print1ToMaxOfNDigitsRecursively(チャー *番号、int型の長さ、int型のインデックス)。
7  
8  ボイド PrintNumber(チャー *の数){
 9      int型のインデックス= 0 10      ブール isBeginning0 = 11      INT NLENGTH = STRLEN(数)
12      // 最初のインデックスの左へのインデックスはゼロではありません。特に注目すべきは、すべてゼロである文字列全体で
13である     ためint型 I = 0 ; IはNLENGTHを<I ++は{)
 14          IF(番号[I] =!' 0 ' ){
 15              、インデックス= I;
 16              BREAK ;
 17          }
 18である     }
 。19      IF(!(インデックス== 0 &&番号[インデックス] == ' 0 ' {))
 20である         ためint型 ; IはNLENGTHを<I ++はI =指数{)
 21である              のprintf(" %のC " 、番号[I])。
22          }
 23          のprintf(" の\ n " );
24      }
 25  }
 26  
27  空隙 Print1ToMaxOfNDigits(int型N){
 28      であれば(N <= 0 ){
 29          リターン30      }
 31      のchar *数= 新しい 文字 [N + 1 ]。
32      数[N] = ' \ 0 ' 33      のためのint型I = 0 ; I < 10 ; 私は++ ){
 34          数が[ 0 ] = iは+ ' 0 ' 35          Print1ToMaxOfNDigitsRecursively(数n、0 );
36      }
 37      削除[]の数と、
38  }
 39  
40  空隙 Print1ToMaxOfNDigitsRecursively(CHAR *番号、int型の長さ、int型のインデックス){
 41      であれば(インデックス==長さ- 1 ){
 42          PrintNumber(番号)
43         返します44      }
 45      のためのint型 I = 0 ; iが< 10 ; iが++ ){
 46          数[インデックス+ 1 ] = I +は' 0 ' 47          Print1ToMaxOfNDigitsRecursively(数、長さ、インデックス+ 1 )。
48      }
 49  }
 50  
51  INT メイン(){
 52      のint 番号;
53      一方(CIN >> 数){
 54          Print1ToMaxOfNDigits(番号)
55     }
 56      リターン 0 57 }

 

おすすめ

転載: www.cnblogs.com/qinduanyinghua/p/11249443.html