劍指 Offer 16 數值的整數次方

2022-09-05 07:00:11 字數 959 閱讀 2829

實現函式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/22 = 1/4 = 0.25

返回的結果肯定是double型別,base的exponent次方;最後需要判斷exponent的正負,如果是負數就返回 1/res;否則返回res。

當exponent是偶數的時候:比如(4,8)表示4的8次方;可以寫成(4*4,8/2)即(16,4),所以可以推導出每次將exponent除以2,base*=base,最終到exponent=0為止。

當exponent是奇數的時候:比如(2,7)等於2*(2*2,3)

所以遞迴寫法

public

double

mypow

(double x,

int n)

但是當n=integer.min_value的時候會報錯,堆疊溢位,因為integer.min_value的相反數還是本身,這個解決方法就是

if

(n<0)

非遞迴

public

double

mypow

(double x,

int n)

x *= x;

}return n <0?

1.0/ res: res;

}

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