50. Pow(x, n)
1、原题
Implement pow(x, n).
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;
}
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;
}