剑指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-面试题11.数值的整数次方

 

 

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

对了这里有个小说明:

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

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

 

你可能感兴趣的:(面试题)