问题描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
如:base = 2, exponent = 3, 输出 8.0
思路1:
按指数定义,指数个基数相乘得出结果,注意边界条件:基数为 0 ,输出 0 ;指数为 0 ,输出 1 ;指数为负数,结果取倒数。
public static double Power(double base, int exponent) {
if(base == 0){
return 0;
}
double sum = 1;
if(exponent < 0){
base = 1.0 / base;
exponent = - exponent;
}
for(int i = 0; i < exponent; i++){
sum *= base;
}
return sum;
}
思路2:
指数有如下规律:
因此,可以使用递归进行求解。为提高效率,可使用移位代替除法,使用与操作判断奇数。
public static double Power(double base, int exponent) {
if(base == 0){
return 0;
}
if(exponent < 0){
base = 1.0 / base;
exponent = - exponent;
}
return ComputePower(base, exponent);
}
public static double ComputePower(double base, int exponent) {
if(exponent == 0){
return 1;
}
if(exponent == 1){
return base;
}
double result = ComputePower(base, exponent >> 1);
result *= result;
if((exponent & 0x1) == 1){
result *= base;
}
return result;
}