题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
分析:
- 指数可能为负数和0,注意0的0次方要提醒输入错误;
- 用递归解法可以在O(logn)的复杂读求一个数的正数次方
- 用fabs(a,b)<1e-15(1e-6)比较浮点数是否相等
代码:
class Solution {
public:
double Power(double base, int exponent) {
if(fabs(base-0.0)<1e-6&&exponent<0)
return 0.0;
unsigned int absExponent=(unsigned int)(exponent);
if(exponent<0)
absExponent=(unsigned int)(-exponent);
double res=myPower(base,absExponent);
if(exponent<0)
return 1.0/res;
return res;
}
double myPower(double x,unsigned int n){
if(n==0) return 1.0;
else if(n%2==0) return myPower(x*x,n/2);
else return x*myPower(x,n-1);
}
};