题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
题解:
这个题我用了两种方式来解答,第一种比较狠,直接跑暴力,没啥技巧,直接把base乘以exponent次,但是要考虑到exponent为负数的情况,于是得到了我下面的代码,这种方式时间复杂度为o(n)
public double Power(double base, int exponent) {
double ans=1;
int flag=1;
if(base==0){
return 0;
}
if(exponent<0){
flag=0;
exponent=Math.abs(exponent);
}
while (exponent!=0){
ans=ans*base;
exponent--;
}
if(flag==0){
return 1/ans;
}
return ans;
}
第二种方式是时间复杂度为log(N)的算法,这个其实用数学知识可以分析出来,如果exponent
是偶数,Power(base, exponent) = Power(base, exponent / 2) * Power(base, exponent / 2)
,如果exponent
是奇数,Power(base, exponent) = base * Power(base, exponent / 2) * Power(base, exponent / 2),当然这种情况也需要考虑exponent为负数的情况,代码如下
public double Power(double base, int exponent) {
double ans=1;
int flag=1;
if(base==0){
return 0;
}
if(exponent<0){
flag=0;
exponent=Math.abs(exponent);
}
while (exponent!=0){
if(exponent%2==0){
base=base*base;
exponent=exponent/2;
}
ans=ans*base;
exponent--;
}
if(flag==0){
return 1/ans;
}
return ans;
}