/**
* 50. Pow(x, n)<br>
* 快速幂<br>
* https://leetcode-cn.com/problems/powx-n/<br>
*
* @author wuwang
*
*/
public class p50 {
public double myPow(double x, int n) {
if (n == 0)
return 1;
double r = 1;
long absn = Math.abs((long) n);// 很多時候对于int范围一定要注意 -2147483648 int_min 求abs直接取负数就會溢出
while (absn > 0) {
if (absn % 2 == 1)
r *= x;
x *= x;
absn >>= 1;
}
if (n < 0)
return 1 / r;
return r;
}
}