题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
最低级的解法:
public class Solution {
public double Power(double base, int exponent) {
if(base==0&&exponent==0) return -1;
else if(base==1||base==0||exponent==1) return base;
else if(exponent==0) return 1;
else{
return caculate(base, exponent);
}
}
public static double caculate(double base, int exponent)
{
double resule=1;
if(exponent>0)
{
for(int i=0;i<exponent;i++)
{
resule=resule*base;
}
}
else
{
for(int i=0;i<Math.abs(exponent);i++) //如果exponent为负数,取取绝对值
{
resule=resule*(1/base);
}
}
return resule;
}
}
最高级的解法:快速幂算法 参考文章:https://blog.csdn.net/qq_19782019/article/details/85621386
public class Solution {
public double Power(double base, int exponent) {
if(base==0&&exponent==0) return -1;
else if(base==1||base==0||exponent==1) return base;
else if(exponent==0) return 1;
else{
double result=1;
int p=Math.abs(exponent);
while(p!=0)
{
if((p&1)==1) result*=base;
p>>=1;
base*=base;
}
if(exponent>0) return result;
else return 1/result;
}
}
}