给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解题思路:注意次方为负数和0的情况
代码一:
public class Solution {
public double Power(double base, int exponent) {
double result=1.0;
if(exponent>0){
for(int i=1;i<=exponent;i++)
result*=base;
}
else if(exponent==0)
result=1;
else{
exponent=-exponent;
for(int i=1;i<=exponent;i++)
result*=base;
result=1/result;
}
return result;
}
}
代码二:
递归:n为偶数,a^n=a^n/
2
*a^n/
2
;n为奇数,a^n=(a^(n-
1
)/
2
)*(a^(n-
1
/
2
))*a
,
时间复杂度O(logn)
public class Solution {
public double Power(double base, int exponent) {
int n=Math.abs(exponent);
if(n==0)
return 1;
if(n==1)
return base;
double result=Power(base,n>>1);
result*=result;
if((n&1)==1)
result*=base;
if(exponent<0)
result=1/result;
return result;
}
}
代码三:
public class Solution {
boolean g_InvalidInput=false;
public double Power(double base, int exponent) {
g_InvalidInput=false;
if(equal(base,0.00)&&exponent<0){
g_InvalidInput=true;
return 0.0;
}
int absExponent=exponent;
if(exponent<0)
absExponent=-exponent;
double result=PowerWithUnsignedExponent(base,absExponent);
if(exponent<0)
result=1.0/result;
return result;
}
double PowerWithUnsignedExponent(double base,int exponent){
double result=1.0;
for(int i=1;i<=exponent;i++)
result*=base;
return result;
}
boolean equal(double num1,double num2){
if((num1-num2)>-0.0000001&&(num1-num2)<0.0000001)
return true;
else return false;
}
}
代码四:
public class Solution {
boolean g_InvalidInput=false;
public double Power(double base, int exponent) {
g_InvalidInput=false;
if(equal(base,0.00)&&exponent<0){
g_InvalidInput=true;
return 0.0;
}
int absExponent=exponent;
if(exponent<0)
absExponent=-exponent;
double result=PowerWithUnsignedExponent(base,absExponent);
if(exponent<0)
result=1.0/result;
return result;
}
double PowerWithUnsignedExponent(double base,int exponent){
if(exponent==0)
return 1;
if(exponent==1)
return base;
double result=PowerWithUnsignedExponent(base,exponent>>1);
result*=result;
if((exponent&1)==1)
result*=base;
return result;
}
boolean equal(double num1,double num2){
if((num1-num2)>-0.0000001&&(num1-num2)<0.0000001)
return true;
else return false;
}
}