题目:

实现 pow(x,n)

样例:

Pow(2.1, 3) = 9.261
Pow(0, 1) = 0
Pow(1, 0) = 1

思路:

分治思想。
对于n是奇数时,$x^n = x^{n/2}* x^{n/2}* x $
对于n是偶数时,$x^n = x^{n/2}* x^{n/2}$$

参考答案:

class Solution {
public:
    /*
     * @param x: the base number
     * @param n: the power number
     * @return: the result
     */
    double myPow(double x, int n) {
        // write your code here
       /* if(n == 0)  return 1.00;
        if(n < 0){
            return 1/myPow(x, -n);
        }
        else return x*myPow(x, n-1);
    }*/
    /*2.0 -2147483648就会通过不了,因为 n = Intege.MIN_VALUE,n = -n 会出现溢出
    Intege.MIN_VALUE == -2147483648 Intege.MAX_VALUE == 2147483647*/
    
        if(n == 0)  return 1.00;
        if(n == 1)  return x;
        //分治思想。 对于n是奇数时,x^n = x^(n/2)*  x^(n/2)* x 对于n是偶数时,x^n = x^(n/2)*  x^(n/2)
        int t = n/2;
        if(n < 0){
           // return 1/myPow(x, -n);//这样就还存在上面的问题-n溢出
           t = -t;
           x = 1/x;
        }
        /*
        if(n%2 == 0)  return myPow(x, n/2)*myPow(x, n/2);
        else    return myPow(x, n/2)*myPow(x, n/2)*x;
        */
        
        double res = myPow(x, t);//这样就可以减少后面计算的次数
        if(n%2 == 0)    return res*res;
        else    return res*res*x;
    }
};

wydong
40 声望5 粉丝

wyd