题目描述
- 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路
- 考虑base是否为0,若为0,返回0。注意判断double类型为0只需判断该值与0.0的差值是否在(-0.0000001,0.0000001)
- 判断exponent的值是否为0,若为0,返回1,并留意exponent是否为负值,若为负值,取倒数。
- 主要计算思路(将exponent转换成正整数的情况)
当n为偶数的时:a^n = a^(n/2)*a^(n/2)
当n为奇数的时候:a^n = a^(n/2)*a^(n/2)*a - 使用递归的原因是复杂度比迭代低很多,时间复杂度为O(logn)。如果使用迭代需要O(n)的复杂度。
Java Code
package power;
public class Power {
public static void main(String[] args)
{
System.out.println(new Power().Caculator(2,-3));
}
public double Caculator(double base, int exponent) {
if(EqualZero(base)) return 0;
if(exponent == 0) return 1;
int n = Math.abs(exponent);
double result = PowerTwo(base,n);
if(n%2 == 1){
result = result*base;
}
if(exponent < 0){
result = 1/result;
}
return result;
}
public double PowerTwo(double base,int exponent)
{
if(exponent == 0) return 1;
if(exponent == 1) return base;
double result = PowerTwo(base,exponent>>1);
return result * result;
}
public boolean EqualZero(double base)
{
double zero = 0.0;
if((base - zero) < 0.0000001 && (base - zero) > -0.0000001)
{
return true;
}
return false;
}
}