对于任何十进制正整数 n,设其二进制为 “ bm...b3 b2 b1 ”
二进制转十进制:
幂的二进制展开:
public double myPow(double x, int n) {
if(x == 0) return 0;
long b = n;
double res = 1.0;
if(b < 0) {
x = 1 / x;
b = -b;
}
// 如 3^15 = 3^8 * 3^4 * 3^2 * 3^1 = 3^2^3 * 3^2^2 * 3^2^1 * 3^2^0
while(b > 0) {
if((b & 1) == 1)//判断b的二进制的最低位数(最右边数位)是否为1
res *= x;
x *= x; //计算x^(2m-1)的值
b >>= 1; //右移一位
}
return res;
}
版权声明:本文为zxx183420原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。