1 //题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 2 //分情况考虑: 3 //第一种情况:底数是0,且指数是负数; 4 //第二种情况:指数小于0; 5 class Solution 6 { 7 public: 8 bool g_InvalidInput = false; 9 double Power(double base, int exponent) 10 {11 //第一种情况:12 if (Equal(base, 0.0) && exponent < 0)13 {14 g_InvalidInput = true;15 return 0.0;16 }17 //第二种情况:考虑指数问题,指数小于0,就要取绝对值18 unsigned int absExponent = (unsigned int ) exponent;19 if (exponent < 0)20 {21 absExponent = (unsigned int)(-exponent);22 }23 double result = PowerWithExponent(base, absExponent);24 if(exponent < 0)25 {26 result = 1.0 /result;27 }28 return result;29 }30 private:31 bool Equal(double num1, double num2)32 {33 if(num1 - num2 > -0.000001 && num1-num2 <0.000001)34 {35 return true;36 }37 return false;38 }39 double PowerWithExponent(double base, unsigned int num)40 {41 if (num == 0)42 {43 return 1;44 }45 if (num == 1)46 {47 return base;48 }49 //***重点理解***由于要递归,故要定义返回值result,终止条件为num == 150 double result = PowerWithExponent(base, num>>1);51 result *= result;52 if (num & 0x1 == 1)53 {54 result *= base;55 }56 return result;57 }58 };