public double myPow(double x, int n) {
if(n == 0) return 1;
if(n < 0) {
n = n;
x = 1 / x;
}
double ans = 1;
while(n > 0){
if((n % 2) != 0) {
ans = ans * x;
}
x = x * x;
n = n / 2;
}
return ans;
}
Similar Idea with Binary

This, like many other similar solutions, break terribly when n is Integer.MIN_VALUE. Fortunately, there seems to be only one test case for that and it's (1, 2147483648), for which this code gives the correct answer 1. Other tests would overflow and give either infinity or zero, but this code would still return 1 (because the loop never executes, as
n < 0
).

the first operate on x is very inspiring. If we want to concern the overflow when n = n, we can do it by negative:
public double myPow(double x, int n) { if(n == 0) return 1.0; if(x == 0) return 0.0; if(n < 0){ x = 1.0 / x; }else{ n = n; } double rst = 1.0; while(n < 0){ if(n % 2 != 0){ rst *= x; } x = x * x; n = n / 2; } return rst; }
it passed