タイトル説明
ダブル基本型と浮動小数点型int型の整数の指数を考えます。パワーベースの指数を求めて。
ベースと指数が同時にではないことを確認0
分析
主として、入力データの整合性を推定する能力に、浮動小数点数の整数パワーを算出します。この問題を解決するために、入力データがあれば存在することがあります。
1.ベース番号は整数インデックス、ゼロではありません
2.塩基数は、インデックスが負で、0ではありません
3.ベース番号が0で、インデックスが負である(ゼロ状況)
4.塩基数は、インデックスが正の数(指定された特別な値0または1)であり、0であります
実装ロジックコードは、すべての可能な入力の場合を検討する一次必要が複雑ではなく、また、浮動小数点数のために、直接的に「==」を直接比較する2つの数値を使用していないことに留意すること。
C ++コードの実現は、以下の通りであります:
クラス解決{ パブリック: ダブルパワー(ダブル ベース、int型の指数){ // 排除零除的情况出现 場合(STD :: ABS(ベース - 0.0)<(1E- 4)&&指数< 0 ){ 戻り 0.0 。 } BOOL isnegative =(指数< 0)?真:偽; 場合(isnegative){ 戻り 1.0 / calc_power(ベース、 - 指数)。 } 他{ 戻り calc_power(ベース、指数)。 } } ダブル calc_power(ダブル ベース、INT unsignedexp){ ダブル RES = 1.0 。 以下のために(int型 i = 0 ; iはunsignedexp <I ++は{) RES * = 塩基; } 戻りRESと、 }
}。
あなたはO(N)から、以下の再帰的な方法で、減少時間計算量O(LOGN)を使用して実装することができ、計算効率のcalc_power機能を改善したいのですが、再帰スタック領域の複雑さがOになった場合(LOGN)
二重 calc_power(ダブル ベース、INT unsignedexp){ // ログ(N)時間計算量は、再帰の同じ深さであるログ(N-) IF(unsignedexp == 0 ){ 返す 1.0 ; } IF(unsignedexp == 1 ){ リターン ベース; } ダブル結果= calc_power(ベース unsignedexp、>> 1。); 結果は、 * = 結果、 IF((unsignedexp&0x1の)== 1 ){ 結果* = ベース。 } 戻り値の結果; }