一、题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
二、解题思路
几个注意点:
1、由于计算机表示小数(包括float和double型小数)都有误差,我们不能直接用等号(==)判断两个小数是否相等。如果两个小数的差的绝对值很小,比如小于0.0000001,就可以认为它们相等。
2、要考虑指数小于0的情况
3、乘法的操作可以用下面的公式来降低复杂度:
a^n = a ^(n/2) * a^(n/2) n为偶数
a^n = a^(n-1)/2 * a^(n-1)/2 * a n为奇数
public class Solution {
public double Power(double base, int exponent) {
if(equals(base, 0.0) && exponent <= 0) return 0.0;
if(exponent == 0) return 1;
int absExponent = exponent;
if(exponent < 0) absExponent = -exponent;
double result = powerWithExponent(base, absExponent >>1);
result *= result;
if((absExponent & 0x1) == 1)
result *= base;
if(exponent < 0) result = 1.0/result;
return result;
}
public double powerWithExponent(double base, int exponent ){
double result = 1.0;
for(int i =0; i < exponent; i++)
result *= base;
return result;
}
public boolean equals(double a, double b){
if( (a-b) < 0.000000001 && (a-b) > -0.000000001)
return true;
return false;
}
}