public class Demo11 {
public double power1(double base,int ex) throws Exception
{
if(equal(base,0.0) && ex < 0)
{
throw new Exception("error input");
//return 0.0;
}
int absex=ex;
if(ex < 0)
{
absex=Math.abs(ex);
}
double result=powerWithUnsigned(base, absex);
if(ex < 0)
{
result=1.0/result;
}
return result;
}
public double power2(double base,int ex) throws Exception
{
if(equal(base,0.0) && ex < 0)
{
throw new Exception("error input");
//return 0.0;
}
int absex=ex;
if(ex < 0)
{
absex=Math.abs(ex);
}
double result=powerWithUnsignedRecursive(base, absex);
if(ex < 0)
{
result=1.0/result;
}
return result;
}
public double powerWithUnsigned(double base,int ex)
{
double result=1.0;
for(int i=1;i<=ex;i++)
{
result*=base;
}
return result;
}
public double powerWithUnsignedRecursive(double base,int ex)
{
if(ex == 0)
{
return 1;
}
if(ex == 1)
{
return base;
}
//参考公式 当幂为奇数时
double result=powerWithUnsignedRecursive(base, ex>>1);
result*=result;
//当幂为偶数时
if((ex & 1) ==1)
{
result*=base;
}
return result;
}
//判断底是否等于0(由于存在精度,此时不可直接用==)
public boolean equal(double d1,double d2)
{
if((d1-d2 > -0.0000001) && (d1-d2 < 0.0000001))
return true;
else
return false;
}
public static void main(String[] args) throws Exception {
Demo11 demo=new Demo11();
System.out.println(demo.power1(0, -1));
System.out.println(demo.power2(0, -1));
}
}
面试题11:数值的整数次方
最新推荐文章于 2022-03-02 16:11:53 发布