劍指 Offer 16 數值的整數次方

2021-10-08 18:30:34 字數 1429 閱讀 3347

題目描述:

實現函式double power(double base, int exponent),求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。

示例1:

輸入: 2.00000, 10

輸出: 1024.00000

示例2:

輸入: 2.10000, 3

輸出: 9.26100

示例3:

輸入: 2.00000, -2

輸出: 0.25000

解釋: 2^(-2) = 1/(2^2) = 1/4 = 0.25

解題思路:

這道題可以借鑑劍指 offer 15. 二進位制中1的個數的思路,這樣可以快速計算出指數exponent的數值,這樣可以減少base進行乘運算的次數,不過這裡需要考慮幾種特殊情況:

(1)exponent為負數且base等於0;

(2)base等於0且exponent為0;同時當exponent為負數時將其轉化為正數時要考慮到轉化後溢位的情況(exponent=-2^(31)),因此exponent要提前強轉為long型別。

這種思路採用兩種實現方式,分別是解法1和解法2,解法3是常規做法。

實現**:

//解法1:快速冪法

public

double

mypow

(double x,

int n)

while

(m >0)

return res;

}//解法2:快速冪法的遞迴寫法

public

double

mypow1

(double x,

int n)

public

double

pow1

(double x,

long n)

//解法3:常規解法(這種解法會超時)

public

double

mypow2

(double x,

int n)

public

double

pow2

(double x,

long n)

劍指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...