題目:給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。
下面來看代碼:
public class PowerSolution {
public static double Power(double base, int exponent) {
//當底數爲0,指數小於0,則爲非法情況。
if (equal(base,0.0)&&exponent<0) {
return 0.0f;
}
//當指數小於0的時候即求該數的倒數再乘方
if (exponent<0) {
int absExponent = -exponent;
double result = PowerWithNonNegative(base, absExponent);
result = 1.0/result;
return result;
}else {
return PowerWithNonNegative(base, exponent);
}
}
//自定義方法來判斷兩個double的數是不是相等,因爲有誤差所以在範圍內都認爲相等
public static boolean equal(double a, double b){
if (((a-b)>-0.00000001)&&((a-b)<0.00000001)) {
return true;
}else {
return false;
}
}
public static double PowerWithNonNegative(double base, int exponent){
if(exponent==0){
return 1;
}
if(exponent==1){
return base;
}
double result = PowerWithNonNegative(base,exponent>>1);
result*=result;
//如果是奇數次方的情況,最終除2餘1要與base相乘
if((exponent&0x1)==1){
result *=base;
}
return result;
}
}