您的位置:首页 > 职场人生

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

2016-04-07 20:19 183 查看
题目:实现函数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中还提出了一种递归的解法,大家可以自行参考。对了这里有个小说明:

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: