這道題的題目為:實現函式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...