12 求数值的整数次方

 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 == 1
50         double result = PowerWithExponent(base, num>>1);
51         result *= result;
52         if (num & 0x1 == 1)
53         {
54             result *= base;
55         }
56         return result;
57     }
58 };

 

posted @ 2017-08-20 20:09  繁星的夜空2012  阅读(108)  评论(0)    收藏  举报