Leetcode50. Pow(x, n)

来源:互联网 发布:js判断上传文件格式 编辑:程序博客网 时间:2024/06/17 12:24

50. Pow(x, n)

1、原题

Implement pow(xn).

Subscribe to see which companies asked this question.

2、题意解析
这道题的题意很是简单,就是让我们实现pow(x,n)这个函数。
一开始,我想到的是最简单的循环累乘,在这里我们会发现这样超时。因此要改变我们的思路。
            我后面的思路是这样的:既然我们不能够使用正常的循环累乘;但是我们可以使用位运算,将一个大的自乘同过位数运算分解为一个简单的乘法。具体内容请看算法。

3、代码
double myPow(double x, int n) {        double res = 1;        //主要是int的负整数绝对值大于正数部分。    unsigned int p;    //当n为负数时,对数据进行相应的处理    if (n < 0) {    p = -n;    x = 1 / x;    } else {    p = n;    }        //位循环    while (p) {        //当此位为1时,结果乘以当前的x值    if (p & 1) {    res *= x;    }    //每进行一次位移,x都^2一次。    x *= x;    //将p向左移一位    p >>= 1;    }        return res;     }

原创粉丝点击