题目
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
输入: x = 2.00000, n = 10
输出: 1024.00000
对于计算x的n 次幂函数,暴力办法是x乘n次,这样会超出时间限制。O(n).
方法利用二进制的思想:
例子(5的9次方),将9转为2进制 1001,这样我们将9次循环转为4次,其值越大,循环次数变小。
代码
class Solution {
public double myPow(double x, int n) {
double res = 1.0; //用于迭代计算初始值
long b = n; //转为long是加大取值范围。
long c ;
if(b < 0){
x = 1/x;
b= -b;
}
List<Integer> list = new LinkedList<>();
while (b>0){
c = b%2;
list.add((int)c);
b /=2;
}
for(int i =0; i<list.size();i++){
if (list.get(i) == 1){
res *=x;
}
x *= x;
}
return res;
}
}
简化版
class Solution {
public double myPow(double x, int n) {
double res = 1.0;
long b = n;
if(b < 0){
x = 1/x;
b= -b;
}
while(b>0){
if(b%2 == 1){
res *=x;
}
x *=x;
b >>=1;
}
return res;
}
}