题目来源:牛客网
编程链接
题目:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解析:
二分求解,速度块:
是否需要再乘以base,就看exp的奇偶性了。奇数则需要乘,偶数不用,另外还需要考虑exp的正负性。
代码:
class Solution {
public:
double Power(double base, int exponent) {
bool f = exponent < 0;
if(exponent==0) //所以递归退出的时候,只需要考虑正数为0就行了
return 1.0f;
int n = exponent>0? exponent:-1*exponent; //这里保证了指数只能为正数
double ret = Power(base,n>>1); //递归
ret = n&0x01? ret*ret*base:ret*ret;
return f? 1/ret :ret;
}
};
运行时间:4ms;占用内存:456k
别人代码:
class Solution {
public:
double Power(double base, int exponent) {
bool f = exponent < 0;
if((exponent = abs(exponent))== 0) //递归退出的条件考虑了指数是负数
return 1.0f;
double ret = Power(base,exponent>>1); //没有区别正负
ret = exponent&0x01? ret*ret*base:ret*ret;
return f? 1/ret :ret;
}
};
运行时间:3ms;占用内存:480k
另外可能还需要考虑base不能为0
class Solution {
public:
double Power(double base, int exponent) {
if(equal(base,0.0)) //判断浮点型的base是否为0
return 0.0;
bool f = exponent < 0;
if(exponent==0)
return 1.0f;
int n = exponent>0? exponent:-1*exponent;
double ret = Power(base,n>>1); //递归
ret = n&0x01? ret*ret*base:ret*ret;
return f? 1/ret :ret;
}
bool equal(float n1,float n2)
{
if(abs(n1-n2)<0.000005)
return true;
else
return false;
}
};