1. 程式人生 > 實用技巧 >Pow(x, n)

Pow(x, n)

實現 pow(x, n) ,即計算 x 的 n 次冪函式。
示例 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] 。

解題思路:

暴力:根據冪次,將底數自乘冪次(n次),迴圈得到結果,負數指數也只是正數結果分之一,這種方法不用想就知道肯定超時的
改進暴力:折半計算,當指數為偶數(n %20)時,就是\(x^n = x ^{(n/2)^2}\)

,如求2的8次冪,就等於2的4次冪的平方,而2的4次冪有等於2的2次冪的平方,2的2次冪有等於2的一次冪的平方,2的一次冪就等於2的0次冪的平方再乘與2也就是2本身;當指數為奇數時(n % 21),除了上述的平方外,還需要再乘一次底數x
通過折半計算,每次把n減半,降低了空間複雜度,也降低了時間複雜度

class Solution {
public:
    double myPow(double x, int n) {
        double res = 1.0;
        for(int i = n; i != 0; i /= 2){
            if(i % 2 != 0){
                res *= x;
            }
            x *= x;
        }
        return  n < 0 ? 1 / res : res;
    }
};