题目:实现函数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中还提出了一种递归的解法,大家可以自行参考。
对了这里有个小说明:
由于计算机在表示小数都有误差,我们不能直接用等号判断两个小数是否相等。
如果两个小数的差的绝对值很小,就可以认为它们相等。