劍指offer 12 數值的整數次方

2022-07-07 17:42:14 字數 1186 閱讀 9679

題目描述

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

保證base和exponent不同時為0。

題目示例

輸入:
2,3

返回值:
8.00000
解法分析看到題目第乙個想到的方法就是用math.pow(base,exponent)或者base**exponent…但是做題肯定不能用現成的輪子,用最簡單的就是用迴圈實現,見演算法1。

但是這種方法效率太低,時間複雜度為 o(n),我們可以考慮使用快速冪的辦法解決問題。

快速冪的核心思想就是每一步都把指數分成兩半,而相應的底數做平方運算,時間複雜度為 o(logn),效率高不少,見演算法2。

**

演算法1:

1

function

power(base, exponent)

2else

if(exponent == 0)else

if(exponent > 0)

13return

n;14 }else

if(exponent < 0)

18return 1/n;19}

20 }

演算法2:

1

function

power(base, exponent)

2else

if(exponent == 0)else

if(exponent < 0)

12var n =base;

13var res = 1;

14while

(exponent)

18 n *=n;

19 exponent >>= 1;20}

21return

res;

22 }

執行結果

劍指Offer (12)數值的整數次方

題目描述 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。實現如下 方法一 迴圈 此題不需要考慮計算後值溢位的情況,即不存在大數情況 異常情況 底數為0時 0.0 指數為0時 1.0 數學定義 指數為負數時,需要考慮先計算指數絕對值的結果...

劍指offer 12 數值的整數次方

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。1 對數字的預處理,比如,0的負數次方等 2 提高計算n的m次方的效率方法一 遞迴。利用公式 ab b 2 0 ab 2 ab 2 a b 1 2 a b 1 2 aclass soluti...

劍指Offer 12 數值的整數次方

description給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。用divide conquer的思路可以每次平方,最後堆起來得到答案。最開始的時候我搞不太清exp 0,1這種情況怎麼合併,所以就單獨分了出來。c double pow...