題目:實現函式double power(double base, int exponent)
,求 base 的 exponent 次方。不得使用庫函式,同時不需要考慮大數問題。
解析:
首先想好測試案例,找出特殊情況
base 可能 正數、負數、0;exponent 可能正數、負數、0
(0,0) :無意義,返回 0 或 1 均可,應詢問面試官
(0,-1):負面輸入,不能對0取負數
(0,2): 0
(2,0)(-2,0):exponent == 0,返回1
(-2,2)(-2,-2):exponent < 0 時,先求 exponent 的絕對值冪結果,然後對結果取倒數
然後考慮是否能優化:發現如果求a的16次方,可以先求8次方,然後8次方平方;要求8次方,可以先求4次方,然後4次方平方,依次類推。。。(遞迴求解,需要考慮exponent的奇偶問題)
關鍵點:
1. 0 不能求負數次冪
2. double 型不能用」==」判斷是否等於某值(精度問題),如果兩者之差的絕對值小於乙個設定的最小數,則可以認為它們是相等的。
3. 優化求冪的計算過程
#include
using
namespace
std;
int g_error = 0;
double powerwithunsignedexponent(double base, unsigned
int exponent);
bool equal(const
double &d1, const
double &d2);
double power(double base, int exponent);
double
abs(const
double &d);
double power(double base, int exponent)
if (base == 0)
return
0; if (exponent == 0)
return
1.0;
if (exponent > 0)
return powerwithunsignedexponent(base, (unsigned
int)exponent);
if (exponent < 0)
return
1.0/powerwithunsignedexponent(base, (unsigned
int)(-exponent));
}// 遞迴求無符號型指數的冪
double powerwithunsignedexponent(double base, unsigned
int exponent)
bool equal(const
double &d1, const
double &d2)
double
abs(const
double &d)
int main()
11Power數值的整數次方
題目描述 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。主要考慮的是怎麼處理0和負指數的問題,常規的正指數比較簡單 計算機內表示小數時會有誤差,判斷兩個小數是否相等,只能判斷它們之差的絕對值是不是在乙個很小的範圍內 author lem...
11 數值的整數次方
要注意的幾個地方 1.如何判斷兩個double型別的資料是否相等。2.需要進行power有效性的判斷,0的負指數次方沒有意義。3.在進行power運算的時候要考慮效率。includeusing namespace std bool isvalid true bool ispositive true ...
11 數值的整數次方
題意 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。public class solution if exponent 0 return 1 res else return res 有一點很重要 整數包括正數 負數和零!還有一點 指數函...