一、題目描述
給定一個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;
}
}