实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
思路:
这是一个快速幂的题目,用二进制的思想来解决这个题目的话。
比如2,9
9=1001
也就=2*2^8
也就是说,我们可以使用进制的思想,通过2进制数n,我们对它的每一位进行取&
class Solution {
public double myPow(double x, int n) {
//快速幂
//-2^31次方 取反之后 2^31会爆,所以把n转为long类型
//判断n是不是负数,负数的话 等于其倒数的整数次方
long m=n;
double res=1.0;
if(n<0){
x=1/x;
m=-m;
}
while(m>0){
if((m&1)==1) {
res*=x;
}
//利用进制的原理,每一位的数都是上一位的平方值
x*=x;
m>>=1;//右移一位
}
return res;
}
}