美文网首页
面试题11:数值的整数次方

面试题11:数值的整数次方

作者: 辉辉_teresa | 来源:发表于2021-02-04 22:23 被阅读0次

题目:实现函数 double Power(double base, int exponent),求 base 的exponent次方。不得使用库函数,同时不需要考虑大数问题。

自以为题目简单的解法

public double MyPow(double x, int n)
{
    var total = 1.0;
    for (var i = 0; i < n; i++)
        total *= x;
    return total;
}

上面代码没有考虑零和负数的情况,只包含了指数是整数的情况。

全面但不够高效的解法(leetcode超时了)

public double MyPow(double x, int n)
{
    if (x == 0) return 0;
    if (n == 0) return 1;
    var total = 1.0;
    var power = Math.Abs(n);
    for (var i = 0; i < power; i++)
    {
        total *= x;
    }
    if (n > 0)
        return total;
    else
        return 1 / total;
}

全面又高效的解法

微信图片_20210204215422.jpg
public double MyPow(double x, int n)
{
    if (x == 0 ||x == 1) return 1;
    if (n == 0) return 1;
    if (n == 1) return x;
    if (n == -1) return 1 / x;
    double val = MyPow(x, n / 2);
    val = val * val;
    val = val * MyPow(x, n - n / 2 * 2);
    return val;
}

我们可以换一种思路考虑:我们的目标是求出一个数字的32次方,如果我们已经知道了它的16次方,那么只要在16次方的基础上再平方一次就可以了。而16次方是8次方的平方。这样以此类推,我们求32次方只需要做5次乘法:先求平方,在平方的基础上求4次方,在4次方的基础上求8次方,在8次方的基础上求16次方,最后在16次方的基础上求32次方。

相关文章

网友评论

      本文标题:面试题11:数值的整数次方

      本文链接:https://www.haomeiwen.com/subject/fapitltx.html