题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
要注意考虑边界条件,注意corner case!!!
解法一:
public class Solution {
public double Power(double base, int exponent) {
if(base==0){
if(exponent==0) return 1;
return 0;
}else if(exponent==0){
return 1;
}
boolean flag=false;
if(exponent<0){
exponent=-exponent;
flag=true;
}
double result=1.0;
for(int i=0;i<exponent;i++){
result*=base;
}
if(flag){
result=1/result;
}
return result;
}
}
解法二(更好的解法):
public class Solution {
public double Power(double base, int exponent) {
if(base==0){
if(exponent==0) return 1;
return 0;
}else if(exponent==0){
return 1;
}
boolean flag=false;
if(exponent<0){
exponent=-exponent;
flag=true;
}
double result=Count(base, exponent);
if(flag){
result=1/result;
}
return result;
}
//用递归实现,效率更高,减少乘法次数
static double Count(double base, int exponent){
if(exponent==1) return base;
double result=Count(base,exponent/2);
result*=result;
if((exponent&1)==1) result*=base;
return result;
}
}