首页 > 其他 > 详细

LeetCode-50-Pow(x, n)

时间:2018-03-02 12:05:58      阅读:197      评论:0      收藏:0      [点我收藏+]

一、问题描述

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!