Pow(x, n)(快速幂+迭代实现)

  • Post author:
  • Post category:其他




题目

实现 pow(x, n) ,即计算 x 的 n 次幂函数。

说明:

1、-100.0 < x < 100.0;

2、n 是 32 位有符号整数,其数值范围是 [−2

31

, 2

31

− 1] 。

示例 :

输入: 2.00000, 10

输出: 1024.00000



注意点

1、n使用long类型存储,避免-N时出现溢出;

2、n = 10 = (1010)

2

= 0 + 2

1

+ 0 + 2

3

;

3、 x

10

= x^ (2

1

+ 2

3

) = x

2

* x

8

;

4、由上面可知,当指数对应的二进制位为0时,不需要计算入结果;当指数对应的二进制位为1时,需要计算入结果;所以从x开始不断地进行平方,得x、x

2

、x

4

、x

8

,如果 n 的对应的二进制位为 1,那么我们就将对应的值计入结果。



实现

class Solution {
    public double myPow(double x, int n) {
    	//使用long,避免-N时出现溢出
        long N = n;
        return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
    }

	//快速幂
    public double quickMul(double x, long N){
        //记录结果
        double ans = 1;
        //记录中间量
        double X = x;

        while(N > 0){
        	//如果n的二进制位为1,将该值乘于结果
            if(N % 2 == 1){
                ans *= X;
            }
            
			//中间量平方
            X *= X;
            N /= 2;
        }
        return ans;
    }
}



版权声明:本文为weixin_43857345原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。