劍指offer 浮點數的整數次方

2022-04-07 11:40:23 字數 808 閱讀 8138

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

base,exponent

base的exponent次方

首先要注意,指數正負和零的情況判別:

①任何數的0次方等於0

②0不能做除數(也就是指數為負時,基數不能為0)

解法一  執行時間:27ms 占用記憶體:636k 

public class solution

if(exponent<0)

} double result = 1;

for(int i=0;i解法二  執行時間:30ms 占用記憶體:510k

把指數以二進位制的形式表達:

舉例(10^13)有10^1101 = 10^0001*10^0100*10^1000。

通過&1>1來逐位讀取1101,為1時將該位代表的乘數累乘到最終結果。

public class solution

if(exponent<0)

}double result = 1;

while(exponent!=0)

exponent>>=1;

base *=base; //指數右移一位,底數翻倍

}return flag < 0 ? 1 / result : result;

}}解法三  執行時間:33ms  占用記憶體:629k

呼叫庫函式

public class solution

}因為pow最終會呼叫乙個native方法,所以時間上還是可以的。

劍指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.效...