[LeetCode] Pow(x, n)

Implement pow(xn).

 

思路:可以连乘,但会超时,所以使用二分法:

注意几点:

1 不要写成pow(x, n/2)* pow(x, n/2) 还是会超时,因为还是会计算两遍,直接使用临时变量tmp= pow(x, n/2),然会return tmp*tmp

2 注意int 有可能为负数

3 注意对于INT_MIN 的处理,他比INT_MAX 的绝对值大于1,直接判读小于0,return pow(x,-n)会越界,所以使用long long 保证其64位,不会越界

class Solution {
    public:
        double pow(double x, int n)
        {
            long long ln = n;
            return powl(x, ln);
        }
        double powl(double x, long long n)
        {
            if(n < 0)
                return 1/powl(x, -n);
            if(n == 0)
                return 1;
            if(n == 1)
                return x;

            if( n & 0x1 == 1)
            {
                double tmp = powl(x, n/2);
                return tmp* tmp * x;
            }
            else
            {
                double tmp = powl(x, n/2);
                return tmp* tmp ;
            }

        }
};

 

posted @ 2015-03-04 14:41  穆穆兔兔  阅读(202)  评论(0编辑  收藏  举报