Implement pow(xn), which calculates x raised to the power n (xn).

Example 1:

Input: 2.00000, 10
Output: 1024.00000

Example 2:

Input: 2.10000, 3
Output: 9.26100

Example 3:

Input: 2.00000, -2
Output: 0.25000
Explanation: 2-2 = 1/22 = 1/4 = 0.25

Note:

  • -100.0 < x < 100.0
  • n is a 32-bit signed integer, within the range [−231, 231 − 1]

我们这里使用二分法:

1.如果一个数的幂次是偶数举例子 2^8 就等于2^4 * 2 ^4

我们发现如果是这种情况我们可以表达成为 pow(x*x, n/2) 其中这里面的x 表示2 那么此时这个函数就成了pow(4, 2) 也就是2^4

2. 如果一个数的幂次是奇数 举例子比如2^9 则他可以转化为2^8 * 2 那么我们就可以表示为Pow(x, n-1)* x => Pow(2, 8) * 2

其次我们需要考虑边界的问题:

1.比如如x == 1 则返回1

2. 比如如果n == 0 则返回1

3. 如果 n == 1 则返回x 本身

代码如下:

 1 #define Ep 0.0000001
 2 #define En -0.0000001
 3 double myPow(double x, long n){
 4     if((x >= En) && (x <= Ep))
 5         return 0;
 6     if(n == 0)
 7         return 1;
 8     if(n == 1)
 9         return x;
10     if(x == 1)
11         return x;
12  if(n > 0){   
13     if(n & 1)
14         return x * myPow(x, n - 1);
15     else
16         return myPow(x*x, n / 2);
17  }
18 else if(n < 0)
19 {
20    return 1/myPow(x, -n);     
21 }
22     
23 return 0;
24 }

 

posted on 2020-05-21 05:02  闲云潭影  阅读(190)  评论(0编辑  收藏  举报