给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
方法一:
public static boolean isInvalidInput = false;
public double Power(double base, int exponent) {
isInvalidInput = false;
//底数是0并且指数是负数的时候
if(base == 0.0 && exponent < 0){
isInvalidInput = true;
return 0.0;
}
int absExponet = 0;
double result;
if(exponent < 0){
absExponet = Math.abs(exponent);
result = PowerWithUnsignedExponent(base, absExponet);
result = 1.0/result;
}else{
result = PowerWithUnsignedExponent(base, exponent);
}
return result;
}
private double PowerWithUnsignedExponent(double base, int exponent){
double result = 1.0;
for(int i = 1; i <= exponent; i++)
result *= base;
return result;
}
方法二:
效率更高。
private double PowerWithUnsignedExponent(double base, int exponent){
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
//用右移运算符代替了除以2
double result = PowerWithUnsignedExponent(base,exponent >> 1);
result *= result;
//用与运算符代替了求余运算来判断一个数是基数还是偶数,效率更高
if((exponent & 0x1) == 1)
result *= base;
return result;
}