package common;
/**
* @author : zhaoliang
* @program :newCoder
* @description : 数值的整数次方
* @create : 2020/11/21 19:52
*/
public class Power {
//给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
static boolean invalidInput = false;
public static double power(double base,int exponent){
//如果底数等于0,且指数小于0。返回0。0
if (equal(base,0.0) && exponent<0){
invalidInput = true;
return 0.0;
}
int absexponent = exponent;
//指数小于0时,先转成正数计算
if (exponent <0){
absexponent = -exponent;
}
//计算结果
double res = getPower(base,absexponent);
//指数小于0返回计算结果的倒数
if (exponent <0){
return 1.0/res;
}
return res;
}
private static double getPower(double b, int e) {
//终止条件
if (e<0){
return 1.0;
}
//指数等于1,返回底数
if (e ==1){
return b;
}
//缩小指数范围
double result = getPower(b,e>>1);
result *=result;
//指数为奇数时,再乘一遍
if ((e&1)==1){
result *=b;
}
return result;
}
private static boolean equal(double base, double v) {
//在此范围内判定等于0
if (base -v >-0.000001 && base - v < 0.000001){
return true;
}else {
return false;
}
}
}
常见算法-数值的整数次方
最新推荐文章于 2024-07-12 18:02:43 发布