2 实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题
代码如下:
5 #include<iostream>
6 using namespace std;
7
8 bool g_InvaildInput = false;
9
10 double PowerWithUnsignedExponent(double base,unsigned int exponent)
11 //用递归来解决大数的模运算
12 {
13 if(exponent == 0)
14 return 1;
15 if(exponent == 1)
16 return base;
17
18 double result = PowerWithUnsignedExponent(base,exponent>>1);
19 //右移一位代表的运算和处以2是等价的,但是右移运算符的效率要比除法的高
20 result *= result;
21 //判断是否为偶数
22 if(exponent & 0x1 == 1)
23 result *= base;
24 return result;
25 }
26
27 bool equal(double num1,double num2)
28 //单精度小数的比较是和0.0000001比较才行
29 {
30 if( ((num1 - num2) > 0.0000001) && ((num1 - num2) < 0.0000001) )
31 return true;
32 else
33 return false;
34 }
35
36 double Power(double base,int exponent)
37 {
38 g_InvaildInput = false;
39
40 if(equal(base,0.0) && exponent < 0)
41 {
42 g_InvaildInput = true;
43 return 0.0;
44 }
45
46 unsigned int absExponent = (unsigned int) (exponent);
47 if(exponent < 0)
48 absExponent = (unsigned int)(-exponent);
49
50 double result = PowerWithUnsignedExponent(base,absExponent);
51 if(exponent < 0)
52 result = 1.0 / result;
53 return result;
54 }
55
56 int main()
57 {
58 cout<<"please input two number"<<endl;
59 int m,n;
60 cin>>m>>n;
61 cout<<"Power is "<<Power(m,n)<<endl;
62 return 0;
63 }