16の勝利の整数電力値オファーフェイス質問

問題:指数整数倍精度浮動小数点型とベースint型所与。パワーベースの指数を求めて。

入力:double型の浮動小数点ベース、int型指数整数。

出力:double型の結果。

アイデア:この質問のアイデアは、そのハンドルに境界値、外れ値の多様性を忘れることは難しいが、簡単ではありません。

指数は、正、それらが指数1回、結果が得られたベース直接乗算である場合

1つの外れ値:指数はマイナスであります

処理方法は、第一の指数の絶対値を求め、その後、それらは、中間結果を得るための乗算を行い、最終的な結果は、1.0 /中間結果です。

2つの異常値:ベースが0の場合、指数は1/0になりやすい、負です。

処理方法:決意を高め、例外がスローされます。

コード:

class Solution {
public:
    double Power_Core(double base, unsigned int exponent)
    {
        double result=base;
        for(unsigned int i=1;i<exponent;++i)
        {
            result=result*base;
        }
        return result;
    }
    double Power(double base, int exponent) {
        double result;
        if(abs(base-0.0)<0.0000001&&exponent<0)
            return 0.0;
        if(exponent==0)
            return 1.0;
        unsigned int absExponent = (unsigned int)(exponent);
        if(exponent<0)
            absExponent = (unsigned int)(-exponent);
        result= Power_Core(base, absExponent);
        if(exponent<0)
        {
            result=1.0/result;
        }
        return result;
    }
};

複雑分析:O(指数)の時間計算量は、空間的複雑度はO(1)です。

パフォーマンスの最適化:時間の複雑さを最適化することによりPower_Core機能がO(ログ指数)、そのまま空間的複雑に縮小されています。

    double Power_Core(double base, unsigned int exponent)
    {
        if(exponent==1)
            return base;
        double result=Power_Core(base,exponent>>1);
        result *= result;
        if(exponent&0x1==1)
            result*=base;
        return result;
    }

 

公開された58元の記事 ウォン称賛10 ビュー7524

おすすめ

転載: blog.csdn.net/qq_22148493/article/details/104461066