劍值offer面試題16 數值的整數次方

2021-09-29 10:31:40 字數 1839 閱讀 7209

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

思路:

題目看起來很簡單,好像乙個迴圈的相乘就可以得到結果,但是這種思考方式是很危險的,因為沒有考慮到邊界情況和特殊輸入的情況,比如指數為負數時候的情況和指數為正數的情況是不一樣的。又比如輸入的底數為0,但是指數為負數,這樣就會出現0做分母的情況,這個時候程式就需要做出相應的響應來應對這種情況。所以,在編寫程式的時候一定要考慮周全,注意細節。

**:

bool g_invalidinput = false;//用來反映輸入資料是否是無效的標誌

bool equal(double num1, double num2)//自定義的比較函式,double型別不能直接用「=」來比較

double power(double base, int exponent)

unsigned int ab***ponent = (unsigned int)exponent;//這種求絕對值的方法要記住

if (exponent < 0)

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

double result = powerwithunsignedexponent(base, ab***ponent);

if (exponent < 0)//處理指數為負數的情況

result = 1.0 / result;

return result;

}//求乘方更高效的解法

double powerwithunsignedexponent2(double base, unsigned exponent)

上面有乙個求乘方更高效的方法,比如要求2的32次方,可以先求2的16次方,求2的16次方可以先求2的8次方,依次推下去,可以用遞迴的方法來實現。

這裡位運算的效率要比除法高很多,還有注意怎麼判斷乙個數是不是奇數,用x & 0x1的方法。

**:

double powerwithunsignedexponent2(double base, unsigned exponent)

複習:這道題給我的最大感受就是要細心,考慮到各種情況對應 的結果,還有乙個最後求指數的值,這種思路很好,可以節省時間,提高效率。

二刷**:

bool g_invalidinput = false;

double power(double base, int exponent)

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

if (exponent < 0)

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

double result = powerwithunsignedexponent(base, ab***ponent);

if (exponent < 0)

result = 1.0 / result;

return result;

}double powerwithunsignedexponent(double base,unsigned int ab***ponent)

bool equal(double a, double b)

}

劍指offer 面試題16

include 思路 遍歷鍊錶過程中,將各個指標入棧,再出棧進行反轉 listnode reverselist listnode phead pnode pnodestack.top listnode pfront pnode pnodestack.pop while pnodestack.empt...

劍指Offer 面試題16 數值的整數次方

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。保證base和exponent不同時為0 題目比較簡單,但是需要全面考慮問題,主要是對冪次進行分類,1.exponent 0 這種情況只需要進行常規操作,無需特殊處理2.exponent 0...

劍指offer 面試題16 數值的整數次方

問題 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。輸入 double型浮點數base,int型整數exponent。輸出 double型結果。思路 本題思路不難,但是容易忘記處理各種邊界值,異常值。當exponent為正數時,base...