码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode-50-Pow(x, n)

时间:2018-03-02 12:32:40      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:turn   转化   int   system   多少   时间复杂度   思考   long   最简   

一、问题描述

  求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)

标签:turn   转化   int   system   多少   时间复杂度   思考   long   最简   

原文地址:https://www.cnblogs.com/likaiming/p/8492127.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!