12.数值的整数次方

题目描述:

  给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

思路分析:

  该题主要要考虑一些特例,分母不能为0,这种情况就是base为零,次数为负。然后就是求数值的整数次方时,我们应该采用时间复杂度低的方式。(base,exponent)=(base,exponent/2)*(base,exponent/2),按照这种方式将计算的规模缩小。

代码:

public class Solution {
    public double Power(double base, int exponent) {
        if(base==0&&exponent<0){  //防止分母出现0
            throw new RuntimeException();
        }
        int absexponent=Math.abs(exponent);
        double res=result(base,absexponent);
        if(exponent<0)
            res=1/res;
        return res;
  }
    public double result(double base,int absexponent){
        if(absexponent==0)
            return 1.0;
        if(base==1.0)
            return 1.0;
        double res=result(base,absexponent>>1);
        res=res*res;
        if((absexponent&1)==1)   //判断次数为奇数次还是偶数次
            res=res*base;        //次数如果为奇数的话, 最后应再乘一次base
        return res;
    }
}
原文地址:https://www.cnblogs.com/yjxyy/p/10706226.html