码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Pow(x, n)

时间:2015-03-04 16:24:40      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

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 ;
            }

        }
};

 

[LeetCode] Pow(x, n)

标签:

原文地址:http://www.cnblogs.com/diegodu/p/4313305.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!