思路:
将底数每次平方,同时将指数减半;
如果指数为奇数,那么就需要将多出来的一次乘法操作放到最后;
比如2*2*2*2*2 ->2^5->4^2 * 2
public double myPow(double x, int n) {
if(x == 0) return 0;
long b = n;
double res = 1.0;
if(b < 0) {
x = 1/x;
b = -b;
}
while(b > 0){
//如果幂次为奇则将多乘一次底数
if((b & 1) == 1) res *= x;
//如果幂次为偶直接 base(底数) 作平方,power(幂次) 除以2
x *= x;//比如2*2*2*2*2 ->2^5->4^2 * 2
b >>= 1;
}
return res;
}