劍指offer 16 求數值的整數次方

2021-08-31 11:40:30 字數 915 閱讀 6098

這道題的題目為:實現函式double power(double base,int n),求base的n次方,不得使用庫函式。

對於這個問題,很容易就能寫出下面的**來求解:

#include#includeint power(int base, int n)

return result;

}int main()

這種方法實現起來確實簡單,但是它不夠全面,有以下幾點缺陷:

(1)沒有考慮到指數為負數的情況;

(2)沒有考慮到底數為0且指數是負數的情況,這種情況下就會出現對0求倒數,然後程式出錯;

針對以上演算法的缺陷,我做了如下改進,總結出了第二種演算法:

(1)當指數為負數時,先對指數求絕對值,算出次方的結果後再求倒數;

(2)定義乙個全域性變數invalidinput 來標記是否出錯。出錯時這個變數被設為true,否則false;

**如下:

#include#includebool invalidinput = false;

double powerwithabsn(double base, int absn)

if (absn == 1)

double result1 = powerwithabsn(base, absn / 2);

result1 *= result1;

//判斷n為偶數還是奇數

if (absn % 2 == 1)

return result1;

}double power(double base, int n)

//指數為負數

else if (n < 0)

//指數為正數

else }

int main()

劍指Offer 16 數值的整數次方

實現函式double power double base,int exponent 求base的exponent次方,不得使用庫函式。同時不需要考慮大數問題。看到乘方,自然想到二分加速的方法。但是這個題關注的不是速度,而是考慮問題的全面性。比如幾個邊界情況,base 0,exp 0 的時候。時間複雜...

劍指offer16 數值的整數次方

題目 實現函式double power double base,int exponent 求base的exponent次方,不得使用庫函式,同時不需要考慮大數問題。一 第一種方法大體分為以下四種情況 1 底數為0,則返回0 2 底數不為0,若指數為0,則返回1 3 底數不為0,若指數為正數,呼叫po...

劍指offer 16 數值的整數次方

保證base和exponent不同時為0 分析 注意考慮特殊情況,當底數為0,如果指數是正整數,則可以返回1,如果底數為0,指數是負整數,那麼就會出錯,而且如果底數不是0,指數是負整數,則返回的應該是底數和正整數運算結果的倒數。因此要考慮齊全。double powerwithunsignedexpo...