【leetcode】劍指 Offer 16. 數值的整數次方

聽雨眠_sun發表於2020-09-30

實現函式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] 。

思路:本題涉及的知識點就是快速冪的計算:某個數x 的n次方,根據n是偶數還是奇數進行拆分,如果是偶數的話,則是x的n/2次方的平方,如果是奇數的話,則是x的n/2次方的平方再乘以x, 如此使用遞迴或者迭代迴圈log(n)次即可。在本題中需要考慮的是指數為負數的情況,可以將指數變成正數,將底數變成原來的倒數即可。程式碼如下:

class Solution {
    public double myPow(double x, int n) {
        if(x == 0){
            return 0;
        }
        long b = n;
        if(b < 0){
            x = 1/x;
            b = -b;
        }
        double ans = 1.0;
        while(b > 0){
            if((b & 1) == 1){
                ans = ans * x;
            }
            x = x * x;
            b = b >> 1;
        }
        return ans;
    }
}

相關文章