class Solution {
public:
double myPow(double x, int n) {
if (n == 0 || x == 1)return 1;
if (x == -1) {
if (n % 2)return -1;
return 1;
}
int flag = 0;
double ans = x, i, n_ = n;
if (n_ < 0)flag = -1, n_ = -n_;
for (i = 1; i*2 <= n_; i *= 2)
ans = ans * ans;
for (int j = 0; j < n_ - i; j++)
ans = ans * x;
if (flag < 0)ans = 1 / ans;
return ans;
}
};
//看了Krahets大佬的思路
class Solution {
public:
double myPow(double x, int n) {
if (x == 0)return 0;
int flag = 1;
double ans = 1;
if (n == -2147483648)
n = 2147483647, flag = x, x = 1 / x;
else if (n < 0)
n = -n, x = 1 / x;
while (n) {
if (n & 1)ans *= x;
x *= x;
n = n >> 1;
}
return ans * flag;
}
};