實現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...