??给定一个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