簡單演算法題之數值的正數次方

2021-09-24 01:37:55 字數 1586 閱讀 9961

本文參考書籍 《劍指offer》 作者何海濤

01 題目實現函式 double power(double base, int exponent),求base的exponent次方,不得使用庫函式,同時不需要考慮大數問題。

02 解法一

最簡單直接的解法, 直接for迴圈相乘

這種情況當輸入的指數為<=0就沒有辦法處理,所以不可取

03 解法二

首先分析所有的可能情況

1.當exponent為0時,(1).base>0或者base<0時,結果為1。

(2)base為0時,可以約定為1,也可以約定為0,0的0次方無意義,具體可以和面試官討論

2.當exponent為負數時 (1) base > 0 and base < 0,對exponent取絕對值得ab***ponent,取ab***ponent次方,最後取倒數。

(2) base = 0 ,0的倒數無意義,拋異常,或者返回其他規定的值

3.當exponent為正數,正常迴圈求值

**如下:

base的乘方

判斷兩個double是否相等

計算機表示浮點數(float或double型別)都有乙個精度限制,對於超出了精度限制的浮

點數, 計算機會把它們的精度之外的小數部分截斷。因此,本來不相等的兩個浮點數在

計算機中可能就變成相等的了。 float a=10.222222225,b=10.222222229,我們這裡

忽略兩個數之間的差特別小的差異,就當做是相等的

求base的exponent次方

03 解法3 乘方部分再次優化

base的exponent方有重複計算的部分,

(1)如 a^32 次方

a^32 = a ^ 16 *a^16 只需要計算一次 a^16次方就可以

再類推,a ^ 16= a ^ 8 *a^8 ,只計算一次 8 a^8次方就可以了

a ^ 8 = a ^ 4 *a^4

a ^ 4=a^2*a^2

a^2=a*a

(2) a^33 = a * a^16*a^16

可以總結為公式

演算法題20 數值的整數次方

題目 求乙個函式的整數次冪,不考慮溢位以及大數問題 分析 本題思路很簡單,採用分治策略,求整數的一半次冪,進而遞迴求解。這個題需要注意底數和指數的各種情況。1 double powercore double base,int exponent 27 8double result powercore ...

程式設計題 數值的整數次方

題目描述 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。保證base和exponent不同時為0 我的思考 1 如果次方是正樹,即直接迴圈累乘即可 2 如果次方是0的話,任何數的0次方都是1 3 如果次方是小於0的數的話,則在迴圈的時候...

演算法 數值的整數次方

從三方面確保 完整性 1 功能測試 測試程式能否按預期完成功能。2 邊界測試 測試一些輸入的邊界,看看程式還能不能正常執行。3 負面測試 測試一些不合法的輸入,檢驗程式的魯棒性。魯棒性實際上就是程式能很好承受使用者的各種輸入 操作也是輸入 的性質,即便要求了正確使用的輸入,也要考慮到其它錯誤的輸入,...