数值的整数次方
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:
主要是要考虑0,指数是负数,base是负数的一些情况。
public class Solution {
//1.需要考虑base为0时,exponent为负数时
//2.当base 为0时直接返回0,但是base 是double 不能直接用==
//3.考虑时间复杂度(logn) ,
// 当exponent为偶数时 a^n=a^(n/2)*a^(n/2)
// 奇数时 a^n=a^(n-1)/2*a^(n-1)/2*a
private boolean isValidateInput=true;
public double Power(double base, int exponent) {
if(equals(base,0.0) && exponent<0){
isValidateInput=false;
return 0;
}
if(equals(base,0.0) && exponent>=0){
return 0;
}
boolean flagNegative=false;
boolean flag=false;
if(base<0){
base=-base;
if(exponent %2 ==1){
flagNegative=true;
}
}
if(exponent<0){
flag=true;
exponent=-exponent;
}
double sum=getPower(base,exponent);
if(flagNegative){
sum=-1*sum;
}
if(flag){
sum=1.0/sum;
}
return sum;
}
public boolean equals(double x, double y){
if((x-y)<0.000001 &&(y-x)<0.000001){
return true;
}
return false;
}
public double getPower(double base,int exponent){
if(exponent==0){
return 1;
}
if(exponent==1){
return base;
}
double result=getPower(base,exponent>>1);
result*=result;
if(exponent%2==1){
result *=base;
}
return result;
}
}
才学疏浅,有什么问题请大家指出来。十分感谢!