快速幂~

166 阅读1分钟
  • 基于二分思想的快速幂经常使用到:

  • 幂的结果的获取: 循环操作x=x^2的操作,每次都把n降为n/2; 初始设res=1。循环二分的过程中,当n为奇数时,将多出的一项x乘入res;为偶数就跳过该步骤,只执行二分。最终会变成

返回res即可。

  • 实例步骤:

  • 流程:
  1. 初始化res=1;

  2. 循环:当n=0时,跳出循环。

    1. 当n%2==1时,将当前x乘入res( res = res*x )
    2. 执行x=x*x;
    3. n=n/2;
  3. 返回res;

  • 注意事项: java中int类型变量的范围是[-2147483648,2147483647],所以涉及倒数运算,需要将负数转为正数的时候,一定要把int型的整数转换成long类型的数,防止因为越界而赋值错误,接下来的操作都只对long进行即可。
  • 代码:
class Solution {
    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;
        }  
        while (b > 0) {
            if (b % 2 == 1) res = res * x;
            x = x * x;
            b = b / 2;
        }
        return res;
    }
}