劍指 Offer —數值的整數次方

復仇Bytedance之路

題目描述:

實現函數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, 2311]

題解

思想就是使用二進制每一位的權重思想

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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章