數值的整數次方(劍指offer面試題11)

2021-09-22 11:16:22 字數 1476 閱讀 1011

實現函式 double power(double base, int exponent),即乘方運算。

考慮問題

思路一:常規思路

#include using

namespace

std;

bool invalidinput = false

;bool equal(double val1, double

val2)

double power(double val, int

exponent)

int ab***ponent = (unsigned int

)(exponent);

double rev = 1.0

;

if(exponent < 0

) ab***ponent = (unsigned int)(-exponent);

for(int i = 0; i < ab***ponent; ++i)

rev *=val;

if(exponent < 0

)

return

1.0 /rev;

else

return

rev;

}int

main()

注意問題

計算機表示小數都有誤差,所以直接用比較(==)會出現錯誤,解決的方法是兩個數做差,與很小的數比較。

當base=0 && exponet < 0時,此時輸入錯誤,用invalidinput作為輸出表示

思路二:遞迴

pow (2, 4) = (pow(2, 4),  2),這樣做會節省時間

#include using

namespace

std;

bool invalidinput = false

;bool equal(double val1, double

val2)

double power(double

base, int

exponent)

return

1.0 / power(base, -1 *exponent);

}else

else

return power(base, exponent - 1) * base

; }

}int

main()

結果

注意問題判斷奇數偶數,可以用val & 1,位操作比除法快

同理,處以2,可以用val / 2 代替

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