題目描述:
實現函數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
說明:
-100.0 < x < 100.0
n 是 32 位有符號整數,其數值範圍是 [−231, 231 − 1] 。
題解
思想就是使用二進制每一位的權重思想
1 1 0 1 =13
2^3 2^2 2^1 2^0
在這裏我們的權重的基底是2,那麼根據題意,我們將基底設爲x,求x^13,注意我權值的變化。
1 1 0 1 =13
x^8 x^4 x^2 x^1
完整代碼
class Solution {
public double myPow(double x, int n) {
long nn=n;
if(x==0){
return 0;
}
if(nn==0){
return 1;
}
if(nn<0){
x=1/x;
//nn爲long的原因就是防止變號之後超過int最大值
nn=-nn;
}
double res=1.0;
while(nn>0){
//注意運算符號的優先級,& 加括號
if((nn&1)!=0){
res=res*x;
}
//更新權值
x=x*x;
//無符號右移,高位補0.
nn=nn>>>1;
}
return res;
}
}