给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
传统公式求解时间复杂度O(n)
public class Solution {
public static double Power(double base, int exponent) {
boolean g_invalid = false;
if(equal(base, 0.0) && exponent < 0){
g_invalid = true;
return 0.0;
}
int absExponent = exponent;
if(exponent<0){
absExponent = -exponent;
}
double result = powerWithUnsignedExponent(base,absExponent);
if(exponent<0){
result = 1.0/result;
}
return result;
}
public static boolean equal(double num1,double num2){
if(num1-num2 > -0.0000001 && num1-num2<0.0000001){
return true;
}else{
return false;
}
}
//时间复杂度为exponent-1
// public static double powerWithUnsignedExponent(double base,int exponent){
// double result = 1.0;
// for(int i = 1;i<=exponent;i++){
// result *= base;
// }
// return result;
// }
public static double powerWithUnsignedExponent(double base,int exponent){
if(exponent==0){
return 1.0;
}
if(exponent==1){
return base;
}
double result = powerWithUnsignedExponent(base, exponent>>1);
result *= result;
if((exponent & 1) == 1){
result *= base;
}
return result;
}
}