Implement pow(x, n).
需要注意的两点
1, 当n为 INT_MIN时:
int n = INT_MIN;
int a = -n; // a == -22147483648
int b = abs(n);// b == -22147483648
2,n 右移了多少次, x 翻多少翻,而不是ans翻多少翻,因为还有ans = ans * x;
AC 代码:
class Solution {
public:
double myPow(double x, int n) {
double ans = 1;
bool isNeg = n > 0? false: true;
if(n == 0) return 1;
if(n == INT_MIN){
n = INT_MAX;
ans = x;
}else{
n = abs(n);
}
while(n){
if(n & 1) ans *= x;
n >>= 1;
x *= x;// n 右移了多少次, x 翻多少翻
}
return isNeg? 1 / ans: ans;
}
};