本文參考書籍 《劍指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型別)都有乙個精度限制,對於超出了精度限制的浮求base的exponent次方點數, 計算機會把它們的精度之外的小數部分截斷。因此,本來不相等的兩個浮點數在
計算機中可能就變成相等的了。 float a=10.222222225,b=10.222222229,我們這裡
忽略兩個數之間的差特別小的差異,就當做是相等的
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 負面測試 測試一些不合法的輸入,檢驗程式的魯棒性。魯棒性實際上就是程式能很好承受使用者的各種輸入 操作也是輸入 的性質,即便要求了正確使用的輸入,也要考慮到其它錯誤的輸入,...