题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解题思路
- 考虑0的负数次幂,0不能做分母
- 考虑幂为正数,负数和0的情况
代码1(循环)
public static double PowerWithUnsignedExponent(double base,int exponent) throws Exception {
//1.注意处理0的负数次幂,要对结果取倒数,错误
if(exponent<0&&base==0) {
throw new Exception("0不能为负数");
}
//2.幂为正数,负数和零的情况
if(exponent>0) {
double result=1;
for (int i = 1; i <=exponent; i++) {
result=result*base;
}
return result;
}else if(exponent<0) {
int absExponent=-exponent;
double result=1;
for (int i = 1; i <= absExponent; i++) {
result=result*base;
}
return 1/result;
}else {
return 1;
}
}
代码2(递归)
public static double PowerWithUnsignedComponent(double base,int component) throws Exception {
if(base==0&&component<0) {
throw new Exception("分母不为0");
}
if(component>0) {
double result=PowerWithUnsignedComponent(base, component>>1);
result*=result;
if((component&0x1)==1) {
result*=base;
}
return result;
}
else if(component <0) {
int abscomponent=-component;
double result=PowerWithUnsignedComponent(base, abscomponent>>1);
result*=result;
if((abscomponent&0x1)==1) {
result*=base;
}
return 1/result;
}else{
return 1.0;
}
}