劍指 Offer 16 數值的整數次方

2021-10-20 22:12:39 字數 973 閱讀 2566

這題用快速冪來解決。

重點:快速冪計算x^n 時,把n看成二進位制數。

舉例:

狀態    遍歷位    n      base  res

初始化 --

101021

第一次 0(0

)1012^

21第二次 1(00

)102^

41*2

^2第三次 0

(000)1

2^81

*2^2

第四次 1

(0000)2

^101*

2^2*

2^8

第五次 n為0結束

注意:只有二進位制位為1的時候才需要更新res,因為2^0=11*res=res

class

solution

// 變數 n∈[−2147483648,2147483647] ,因此當 n = -2147483648n=−2147483648 時執行 n = -n會因越界而賦值出錯。解決方法是先將 n 存入 long 變數 b ,後面用 b 操作即可。

long b = n;

double res =

1.0;

if(b <0)

while

(b >0)

x *= x;

//基底翻倍

b = b >>1;

//右移b1位,其實就是刪除最後那個二進位制數

}return 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...