题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
分析
首先想到用递归去做,但是要考虑:
- e等于0时,不管b是多少,结果总为1
- b等于1时,不管e是多少,结果总为1
- 当e小于零时,b不能为0
- e<0时,结果为 1/b^(-e)
public class Solution {
public double Power(double base, int exponent) {
if(base == 0 && exponent < 0){
throw new RuntimeException("分母不能为0");
}
if(exponent == 0 || base == 1){
return 1;
}
else{
int absExponent = exponent > 0 ? exponent : (-exponent);
if(absExponent == 1){
return base;
}
else{
double res = base*Power(base, absExponent-1);
return exponent > 0 ? res : 1/res;
}
}
}
}
/**
*另外也可以用循环来做
*循环的话,要判断e是奇数还是偶数,通过e&1 == 1 来判断是奇数
*/
public class Solution {
public double Power(double base, int exponent) {
double res = 1;
if(base == 0 && exponent < 0){
throw new RuntimeException("分母不能为0");
}
int absExponent = exponent >= 0 ? exponent : (-exponent);
while(absExponent != 0){
if((absExponent & 1) == 1){
res *= base;
}
base *= base;
absExponent >>= 1;
}
return exponent >= 0 ? res : 1/res;
}
}