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

2021-07-12 08:05:24 字數 2687 閱讀 5996

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

分析:

源**如下:

#includeusing std::cout;

using std::cin;

using std::endl;

class throwerror{};

double powerwithunsigned1(double base, int exponent)

double power1(double base, int exponent)

; }

else

//指數大於0時,返回0

return 0;

} else

else

}}void test11()

void test12()

void test13()

void test14()

void test15()

int main()

執行結果:

0^5 = 0

2^-5 = 0.03125

-2^-5 = -0.03125

-2^5 = -32

0^0 = 0

請按任意鍵繼續. . .

分析:方法一雖然較全面的計算出指數的值,但每次都需要迴圈exponent次,效率顯然不是很高。如果exponent為32,32是16的平方,16是4的平方,依次類推,可以得到以下公式,使用遞迴方法可以顯示該演算法。

源**如下:

#includeusing std::cout;

using std::cin;

using std::endl;

class throwerror{};

double powerwithunsigned2(double base, int exponent)

double power2(double base, int exponent)

; }

else

//指數大於0時,返回0

return 0;

} else

else

}}void test21()

void test22()

void test23()

void test24()

void test25()

int main2()

執行結果和方法一一致!

注意:我們用右移替代了除以2,用位於運算替代了求餘運算子判斷是基數還是偶數,這種方法可以提高效率!

#include#include #includebool g_invalidinput = false;

bool equal(double num1, double num2);

double powerwithunsignedexponent(double base, unsigned int exponent);

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 exponent)

*/double powerwithunsignedexponent(double base, unsigned int exponent)

bool equal(double num1, double num2)

// ********************測試**********************

void test(double base, int exponent, double expectedresult, bool expectedflag)

int main()

運算結果:

test1 begins.

test passed.

test2 begins.

test passed.

test3 begins.

test passed.

test4 begins.

test passed.

test5 begins.

test passed.

test6 begins.

test passed.

test7 begins.

test passed.

請按任意鍵繼續. . .

劍指offer面試題11

面試題1 數值的整數的次方 題目 實現函式double power double base,int exponent 求base的 exponent次方。不得使用庫函式,同時不需要考慮大數問題。思路 首先應該明確指數的可能取值 正整數,0,負整數 另外還需要考慮底數是0的情形。對於負整指數,我們可以...

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

首先,我們分析下可能出現的情況 指數可能為負值,我們先求指數的絕對值次方,然後求導。求導,那就要考慮分母不為0的情況了。bool g invalidinput false double power double base,int exponent unsigned int ab ponent uns...

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

題目 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方 class solution int powerresult double base,unsigned int exponent double result 1.0 for int i...