思路:
这道题要注意的点就是指数是负数的时候,这里当出现指数为负数的时候,我们是把x变为1/x来做的,但是要考虑负数是否取到最小值,因为最小值取反是超过int的最大值的,处理也很简单,我们只需要先把x的一次方提取出来,这样就不会存在越值得问题,具体看代码即可。
代码:
class Solution {
public:
double myPow(double x, int n) {
// 特殊情况处理
if(n == 0) return 1;
if(x == 0) return 0;
double ans = 1;
// 因为 n 为负时最小可达-2147483648,直接取反时超过int上限,因此特殊处理
if(n < 0)
{
x = 1 / x;
ans = x;
n = -(n + 1);
}
// 快速幂
while(n > 0)
{
if(n % 2 > 0) ans *= x;
n /= 2;
x = x * x;
}
return ans;
}
};