public class E16Power {
//数值的整数次方
//功能测试、边界测试、错误处理
//常规解法
public static double power_solution1(double base, int exponent){
//底为零且指数为负时分母为零
if (base == 0.0 && exponent < 0)
throw new IllegalArgumentException("Illegal Input!");
if (exponent == 0)
return 1.0;
//先计算exponent为正的情况
double result = nonnegativePower1(base, Math.abs(exponent));
if (exponent < 0)
return 1.0 / result;
else
return result;
}
private static double nonnegativePower1(double base, int exponent){
//exponent > 0
double result = 1.0;
int step = 0;
while(step <= exponent){
result *= base;
step++;
}
return result;
}
//二分思想
public static double power_solution2(double base, int exponent){
if (base == 0.0 && exponent < 0)
throw new IllegalArgumentException("Illegal Input!");
double result = nonnegativePower2(base, Math.abs(exponent));
if (exponent < 0)
return 1.0 / result;
else
return result;
}
private static double nonnegativePower2(double base, int exponent){
//exponent > 0
//递归终止条件
if (exponent == 0)
return 1.0;
if(exponent == 1)
return base;
double result = power_solution2(base, exponent >> 1);
result *= result;
//余数为1时
if ((exponent & 0x1) == 1)
result *= base;
return result;
}
public static void main(String[] args){
System.out.println(E16Power.power_solution2(2.5, 3));
System.out.println(E16Power.power_solution2(2.5, -3));
System.out.println(E16Power.power_solution2(2.5, 0));
System.out.println(E16Power.power_solution2(0, 1));
System.out.println(E16Power.power_solution2(0, 0));
//System.out.println(E16Power.power_solution2(0, -1)); //IllegalArgumentException
}
}
数值的整数次方(Java实现)
最新推荐文章于 2022-08-01 10:18:00 发布
本文介绍了一种计算数值的整数次方的算法,包括常规解法和使用二分思想的优化解法。通过两个不同的方法实现,分别适用于不同场景的需求。文章提供了详细的代码实现,展示了如何处理边界情况,如底数为零且指数为负时的异常输入。
1011

被折叠的 条评论
为什么被折叠?



