給定乙個double
型別的浮點數base
和int
型別的整數exponent
。求base
的exponent
次方。
保證base
和exponent
不同時為0
。
(1)簡單直接的解法當然是迴圈,一次一次乘。
(2)乙個需要注意的地方是指數的正負:2^(-n)=1/(2^n)
。
(3)快速冪計算,即每次將指數折半計算,複雜度o(logn)
。計算公式為:
b as
eexp
onen
t=
=\begin base^2}*base^2}, exponent=2k\\ base^2}*base^2},exponent=2k+1\\ \end
baseex
pone
nt=double
mypower
(double base,
int positive)
};
/**
* 1.全面考察指數的正負、底數是否為零等情況。
* 2.寫出指數的二進位制表達,例如13表達為二進位制1101。
* 3.舉例:10^1101 = 10^0001*10^0100*10^1000。
* 4.通過&1和》1來逐位讀取1101,為1時將該位代表的乘數累乘到最終結果。
*/public
double
power
(double base,
int n)
else
if(n<0)
else
while
(exponent!=0)
return n>=
0?res:(1
/res)
;}
舉個例子說明執行的過程:
exponent=11,base=2,ans=1
exponent
base
ans1121
5422
168125680
256*256
2048
(1)神奇的位運算。
劍指offer 數值的整數次方
1 題目描述 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。2 思路 需要考慮到的情況 1 指數為負數的時候,可以先對指數求絕對值,算出次方之後的結果再取倒數。2 當底數是0,指數是負數的時候,可以將無效變數設定為true,並返回0。3...
劍指offer 數值的整數次方
給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。將指數大於0,小於0,等於0 底數不為0 的情況分開。其實指數為0的情況不必單獨拎出來 不進入if直接返回result為1.0 真正需要考慮的是,底數為0而指數為負的情況,數學上沒有意義。書...
劍指offer 數值的整數次方
給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。1.最直觀的方法,遞迴求解a b a a b 1 當然也可以用迴圈實現。要注意特殊情況,指數為0時乘方結果都是1 指數為負數時的計算,可以先轉化為正數再求倒數,但是底數為0時不能求導。2.效...