剑指offer-面试题11.数值的整数次方

题目:实现函数double Power(double base,int exponent),求base的

exponent次方。不得使用库函数,同时不需要考虑大数的问题.

 

这道题看似很简单:

然而需要考虑的方面到不少:

1.如何处理指数为负数,将负数当成正数处理 对结果求倒

2.当指数为负数的时候并且底数为0的时候如何处理

3.当指数为0底数为0的情况

 

这里我们这样考虑,把底数为0的所有输入处理为无效输入,返回0

 

代码实现如下:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 double Power(double base,int exponent)
 5 {
 6     bool zerosflag=false;
 7     if(base<0.00001&&base>-0.00001)
 8     {
 9         zerosflag=true;
10     }
11 
12     if(zerosflag)
13     {
14         return 0.0;
15     }
16 
17     if(exponent==0)
18     {
19         return 1.0;
20     }
21 
22 
23 
24     bool flagminus=false;
25     if(exponent<0)
26     {
27         flagminus=true;
28         exponent=-exponent;
29     }
30 
31     double answer=1.0;
32     for(int i=0;i<exponent;i++)
33     {
34         answer*=base;
35     }
36 
37     if(flagminus)
38     {
39         return 1/answer;
40     }
41     else
42     {
43         return answer;
44     }
45 
46 }
47 
48 int main(int argc, char* argv[])
49 {
50     double base;
51     int exponent;
52     double answer;
53     while(1)
54     {
55         cout<<"Please input base number: ";
56         cin>>base;
57         cout<<"Please input exponent number: ";
58         cin>>exponent;
59         answer=Power(base,exponent);
60         
61         if(answer==0.0)
62         {
63             cout<<"Invalid Input: base="<<base<<" exponent="<<exponent;
64         }
65         else
66         {
67             cout<<"The Power is: "<<answer;
68         }
69         cout<<endl;
70     }
71 
72     return 0;
73 }

测试截图如下:

 

 

当然剑指offer中还提出了一种递归的解法,大家可以自行参考。

对了这里有个小说明:

由于计算机在表示小数都有误差,我们不能直接用等号判断两个小数是否相等。

如果两个小数的差的绝对值很小,就可以认为它们相等。

 

posted @ 2015-07-23 16:19  vpoet  阅读(189)  评论(0编辑  收藏  举报