劍指offer--11.數值的整數次方

題目描述

給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。

全面考慮問題:
1、base==0base!=0
2、exponent>0exponent==0exponent<0

這裏寫圖片描述

class Solution {
public:
    //時間複雜度爲O(n)
    double PowWithPos(double base, unsigned int exp)
    {
        for (int i = 0; i < -exponent; ++i)
                {
                    res *= base;
                }
    }

    double Power(double base, int exponent) {
        double res=1.0;
        if (base-0.0<-0.0000001 || base-0.0>0.00000001)
        {
            if (exponent == 0)
            {
                return 1.0;
            }
            else if (exponent > 0)
            {
                res = PowWithPos(base, exponent);
                return res;
            }
            else
            {
                res = PowWithPos(base, -exponent);
                return 1 / res;
            }
        }
        else
            return 0.0;
    }
};

優化:
這裏寫圖片描述

這裏寫圖片描述

Noticeexponent>>1exponent & 0x1 == 1 判斷是否爲奇數

自己實現版本:

    //優化到時間複雜度O(logn)
    //a^n=n爲偶數,a^(n/2)*a^(n/2)
    //a^n=n爲奇數,a^(n-1/2)*a^(n-1/2)*a
    double PowWithPos(double base, unsigned int exp){
            if (exp == 0)
                return 1;
            if (exp == 1)
                return base;

            double res;

            if (exp % 2 == 0)
            {
                res = PowWithPos(base, exp / 2);
                res *= res;
                return res;
            }
            else
            {
                res = PowWithPos(base, (exp-1) / 2);
                res *= res;
                res *= base;
                return res;
            }   
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章