您的位置:首页 > 其它

[LeetCode] Pow(x, n)

2015-03-04 14:41 381 查看
Implement pow(x, n).

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

注意几点:

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

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: