今天刷题发现一个有趣的事情通过递推公式求 a 的n 次幂。公式
很简单的写法。
测试不能通过。原因
int 取值范围为-2147483648~2147483647 此时
负数变正是会溢出的 值还是负的
所以使用long 防止溢出
class Solution {
public:
double myPow(double x, int n) {
long N = n;
if(n<0)
return 1/myPowReturn(x, -N);
return myPowReturn(x, N);
}
double myPowReturn(double x, long n)
{
if(n==0)
return 1;
if(n==1)
return x;
double half = myPow(x,n>>1);
if( (n & 1) == 0) //偶数
{
return half*half;
}
else //奇数
{
return half*half*x;
}
}
};
同时还有个问题
if(n >> 2 == 0)
由于优先级问题
是先判断2==0
所以要加括号