11 數值的整數次方 Power

2021-07-03 15:21:11 字數 1587 閱讀 8793

題目:實現函式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 有一點很重要 整數包括正數 負數和零!還有一點 指數函...