題目出處
演算法標籤:模擬、快速冪。
這是一道比較簡單的演算法題,要求不使用c++自帶的冪函式來計算base的exponent次方,並將結果返回。
根據題目要求,可以確定以下變數的範圍
base[double]
exponent[int]
pow(base,exponent)[double]
題目看起來很簡單,但是當abs(exponent)的值非常大的時候,很有可能會tle。
這是最簡單的暴力做法:時間複雜度o(n)
class solution
double temp = base;
while(exponent-->1)base *= temp;
return base;}};
指數為0時,結果為1。
若指數<0,把底數變成倒數,將指數取正。
再對base乘(指數-1)次temp,因為原先base就是1次,所以要減1次。
例:base = 2,exponent = 3;(3 -->1)會執行兩次,最終結果就是222=8
很明顯,此方法無法通過這個樣例,以該複雜度最多需要計算2的32次。
下面引入乙個新的方法。
快速冪:時間複雜度o(log2n),
這樣最多需要進行32次計算。
指數為0時,返回1.
指數 <0時,把底數變成倒數,對指數取正。
temp用於儲存base方便計算,base變為1,也就是base的0次。
exponent%2 與exponent&1效果等價,exponent /= 2 與exponent>>=1效果等價。
位運算的速度遠遠大於其它運算,所以採用位運算。
exponent在執行過程中實際被分解為了反向的二進位制數。
例:base = 1.47,exponent = 38,根據**,會得到以下資料
base = 1,exponent會被分解為0 1 1 0 0 1,temp = 1.47,理論答案是1.47的38次。
exponent的六次資料分別與1.47的1、2、4、8、16、32次等價
最後的base就是1.47的(2+4+32)次,即1.47的38次,即最終答案。
數值整數次方
題目 實現函式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,如果...