050 Pow(x, n)[M]

1 题目描述

Implement ref
=
http://www.cplusplus.com/reference/valarray/pow/“>pow(x, n).

难度:Medium

2 题目样例

Example 1:

Input: 2.00000, 10
Output: 1024.00000
Example 2:

Input: 2.10000, 3
Output: 9.26100

3 题意分析

实现幂函数。

4 思路分析

快速幂,具体思路不再多说了,随便搜都有一大把。

但是这里有一个扩展阅读很有意思

计算机是怎样进行开方和幂运算的?www.zhihu.com《050 Pow(x, n)[M]》

所以说pow应该是可以利用机器指令在 《050 Pow(x, n)[M]》 时间内算出的。

快速幂代码如下

class Solution {
public:
    double _pow(double x, long long n){
        if(n==0)
            return 1;
        if(n==1)
            return x;
        if(n&1)
            return x * _pow(x, n-1);
        else{
            double tp = _pow(x, n/2);
            return tp*tp;
        }
    }
    double myPow(double x, int n) {
        long long tp = n;
        if(tp<0)
            return 1/_pow(x, -tp);
        return _pow(x, tp);
    }
};

整体时间复杂度 《050 Pow(x, n)[M]》 ,空间复杂度 《050 Pow(x, n)[M]》

5 后记

这道题并不重要,但是相比之下知道了计算机内pow可以是O(1)实现还是比较震惊的。

    原文作者:澪同学
    原文地址: https://zhuanlan.zhihu.com/p/34600269
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞