快速求幂
求幂的时候不用一次一次相乘,可以每次平方,并将幂除以2
例如:
具体来说
2的10次方,可以变换为:
4的5次方
4 * 4的4次方
4 * 16的2次方
4 * 256的一次方
class Solution {
public double myPow(double x, int n) {
if(n == 0) return 1.0;
//直接负最小值,变换成正最大值会出错,范围不一样
long new_n = n;
if(n < 0){
if(x == 0.0) return 0.0;
new_n = -new_n;
x = 1.0 / x;
}
double sum = 1.0;
while(new_n > 1){
if(new_n % 2 == 1){
sum *= x;
}
x *= x;
new_n = new_n / 2;
}
return sum * x;
}
}