# 50. powx n

**<font color=red>难度:Medium</font>**

## 刷题内容

> 原题连接

* https://leetcode.com/problems/powx-n/

> 内容描述

```
mplement pow(x, n), 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 [?2^31, 2^31 ? 1]
```

> 思路1
******- 时间复杂度: O(lgN)******- 空间复杂度: O(1)******

求一个数的n次方是我们经常用的函数，一般刚开始可能会用暴力的方法去求，做了n次循环，但由于这里的n非常大，单纯的暴力会TLE，这里可以用分治的思想，比如``2*2*2*2``，我们前面已经计算过``2*2``了，那么后面就不用再计算依次，就相当于``2*2*（2*2）``,这样时间复杂度就变成了lgN，接下来只要主要幂次是负数的情况即可

```cpp
class Solution {
public:
    double Pow(double x, long long n)
    {
        if(!n)
            return 1;
        if(n == 1)
            return x;
        double temp = Pow(x,(n)/ 2);
         double ret;
        if(n&1)
            ret = temp * temp * x;
        else
            ret = temp * temp;
        return ret;
    }
    double myPow(double x, int n) {
        long long k = n;
        if(n < 0)
            x = 1 / x;
        return Pow(x,n);
        }
};
```
