演算法系列 數值的整數次方

2021-08-07 18:46:11 字數 1353 閱讀 8299

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。

看到了很多人會這樣寫:

public

static

double

powerwithexponent(double

base,int exponent)

return result;

}

輸入的指數(exponent)小於1即是零和負數時怎麼辦?

當指數為負數的時候,可以先對指數求絕對值,然後算出次方的結果之後再取倒數,當底數(base)是零且指數是負數的時候,如果不做特殊處理,就會出現對0求倒數從而導致程式執行出錯。最後,由於0的0次方在數學上是沒有意義的,因此無論是輸出0還是1都是可以接受的。

乙個細節,再判斷底數base是不是等於0時,不能直接寫base==0,這是因為在計算機內表示小數時(包括float和double型小數)都有誤差。判斷兩個數是否相等,只能判斷 它們之間的絕對值是不是在乙個很小的範圍內。如果兩個數相差很小,就可以認為它們相等。

public

class solution

if (equal(exponent, 0))

if (exponent < 0) else

return result;

} private

double

powerwithexponent(double

base, int exponent)

return result;

}// 判斷兩個double型資料,計算機有誤差

private boolean equal(double num1, double num2) else

}}

還有更快的方法。

如果我們的目標是求出乙個數字的32次方,如果我們已經知道了它的16次方,那麼只要在16次方的基礎上再平方一次就好了,依此類推,我們求32次方只需要做5次乘法。

private

double

powerwithexponent2(double

base,int exponent)

if(exponent == 1)

double result = powerwithexponent2(base, exponent >> 1);

result *= result;

if((exponent&0x1) == 1)

return result;

}

我們用右移運算代替除2,用位與運算子代替了求餘運算子(%)來判斷乙個數是奇數還是偶數。位運算的效率比乘除法及求餘運算的效率要高很多。

數值整數次方

題目 實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮 大數問題。includebool equal double num1,double num2 double powerwithunsignede...

數值整數次方

題目 實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮 大數問題。includebool equal double num1,double num2 double powerwithunsignede...

數值的整數次方

題目 實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮大樹問題。這道題目有以下幾點需要注意 0的0次方是無意義的,非法輸入 0的負數次方相當於0作為除數,也是無意義的,非法輸入 base如果非0,如果...