LeetCode-50-Pow(x, n)

Posted 番茄汁汁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-50-Pow(x, n)相关的知识,希望对你有一定的参考价值。

一、问题描述

  求x的n次方

二、问题解决

1、最简单的思路,当n大于0时,对1乘n次x。当n小于0时,对1乘n次1/x。

double myPow(double x, int n) {
    long long N = n;
    if (N < 0) {
        x = 1 / x;
        N = -N;
    }
    double result = 1;
    for (long long i = 0; i < N; i++) {
        result = result * x;
    }
    return result;
}

//这是测试用例
int main()
{
    cout << myPow(2.0000,INT_MIN) << endl;

    system("pause");
    return 0;
}

 

2、时间复杂度为log的解决。每次对n取n/2,对x取x的平方(如果n%2 == 1时结果还需乘一个n)。

double myPow(double x, int n) {
    long long N = n;
    if (N < 0) {
        x = 1 / x;
        N = -N;
    }
    double result = 1;
    double temp = x;
    for (long long i = N; i != 0; i /= 2) {
        if (i % 2 == 1)
            result = result * temp;
        temp = temp * temp;
    }
    return result;
}

//这是测试用例
int main()
{
    cout << myPow(2.0000,INT_MIN) << endl;

    system("pause");
    return 0;
}

三、问题思考

  本题注意n<0的情况,能转化成1/x的多少次方来求。但是注意INT_MIN取负的问题。

以上是关于LeetCode-50-Pow(x, n)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode50. Pow(x, n)(快速幂)

LeetCode50. Pow(x, n)(快速幂)

LeetCode50 Pow(x, n)

LeetCode50. Pow(x, n)

[LeetCode] 50. Pow(x, n)

leetcode || 50Pow(x, n)