题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:
exponent大于,等于,小于0
base为0,非0
讨论这6种情况
解题:
class Solution {
public:
double Power(double base, int exponent) {
double Res=1;
if(exponent==0)//equal
{
if(base=0)
return 0.0;//0/1都可以其实
else
return 1.0;
}else if(exponent>0){//positive
if(base==0)
return 0;
else{
for(int i=0;i<exponent;i++)
Res*=base;
}
}else if(exponent<0) //negative
{
if(base==0)
return NULL;//无意义,如果面试最好提出来说
else
{
Res=Power(base,-1*exponent);//递归了一下,其实没有必要
Res=1/Res;
}
}
return Res;
}
};
剑指offer里面也有一种所谓高效的算法,但是内存超出限制了。。。
递归,指数除以2,然后递归到指数为0/1.
思路挺好,但是空间用的多,并且递归并不高效啊感觉。
class Solution {
public:
double Power(double base, int exponent) {
if(exponent==0)
return 1;
if(exponent==1)
return base;
double Res=Power(base,exponent>>1);//移位比除法快
Res*=Res;
if(exponent&0x1==1)//位运算比求余运算快
Res*=base;
return Res;
}
};
Java解法
public class Solution {
public double Power(double base, int exponent) {
if(base == 0){
return 0;
}
double result = 1;
int expAbs = exponent;
if(exponent < 0){
expAbs = -1 * exponent;
}
for(int i =0;i<expAbs;i++){
result = base * result;
}
if(exponent < 0){
result = 1/ result;
}
return result;
}
}