不得使用库函数,实现 pow(x, n) ,即计算 x 的 n 次幂函数(即, ​​​​​​x^n)。

对于任何十进制正整数 n,设其二进制为 “ bm...b3 b2 b1 ” 

二进制转十进制:n = 1b_{1} + 2b_{2}+ 4b_{3} + ... + 2^{m-1}b_{4}

幂的二进制展开:x^{n} = x^{1b_{1} + 2b_{2} + 4b_{3} + ... + 2^{m-1}b_{m}} = x^{1b_{1}}x^{2b_{2}}x^{4b_{3}}...x^{mb_{m-1}}

 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版权协议,转载请附上原文出处链接和本声明。