题目:
Implement pow(x, n).
解法:
题目要求实现幂的计算,需要注意的是n可能为负值,以及n为很大的int时的TLE问题(一开始用白痴方法果然TLE了)
其实这题和之前的不用乘除求乘法是一样的思路,采用二分法,将n分解为2的幂之和的形势,这样可以分开对每个幂做运算再把结果相乘
public class No49_PowXN {
public static void main(String[] args){
System.out.println(pow(2, -3));
}
public static double pow(double x, int n){
if(n == 0) return 1;
int sign = 1;
if(n<0) {
sign = -1;
n = 0 - n;
}
double ret = x;
int i = 1;
while(i <= n/2){
ret *= ret;
i *= 2;
}
if(sign>0)
return ret*pow(x, n-i);
return 1/ret/pow(x,n-i);
}
}