question:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0.
解法一:循环相乘
思路: 注意exponent可能为负数即可。
public class Solution {
public double Power(double base, int exponent) {
double result=1;
for(int i=0;i<Math.abs(exponent);i++){
result*=base;
}
if(exponent<0){
result=1/result;
}
return result;
}
}
解法二:调用库函数
public class Solution {
public double Power(double base, int exponent) {
return Math.pow(base,exponent);
}
}
解法三:递归快速幂
public class Solution {
//递归快速幂
public double Power(double base, int exponent) {
if(exponent==0) return 1;
if(base==0&&exponent<0) throw new RuntimeException();
if(base==0&&exponent>0) return 0;
int n = exponent;
if(exponent<0) n = -n;
double tmp = Power(base,n/2);
double result = tmp*tmp;
if((n&1)==1) result *= base;
if(exponent<0) return 1/result;
return result;
}
}
解法四:非递归快速幂
public class Solution {
public double Power(double base, int exponent) {
if(exponent==0) return 1;
if(base==0&&exponent<0) throw new RuntimeException();
if(base==0&&exponent>0) return 0;
int n = exponent>0?exponent:-exponent;
double tmp = base;
double result = 1;
while(n!=0){
if((n&1)==1){
result *= tmp;
}
tmp *= tmp;
n >>= 1;
}
return exponent>0?result:1/result;
}
}