题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
完整代码:
class Solution {
public:
double Power(double base, int exponent) {
//第一种情况,base=0.0,exponent<0
if(equal(base,0.0) && exponent<0)
{
return 0.0;
}
//指数取绝对值
unsigned int absexponent=(unsigned int)exponent;
if(exponent < 0)
absexponent = (unsigned int)(-exponent);
//第二种情况,base>0,exponent>0
//计算base的exponent的次方
double result = Basewithunsignedintexponent(base, absexponent);
//第三种情况,base>0,exponent<0
if(exponent < 0)
result = 1.0 / result;
//返回最终的结果
return result;
}
private:
//判断两个数是否相等
bool equal(double num1, double num2)
{
//如果两个数相等,则返回true
if((num1-num2)>-0.0000001&&(num1-num2)<0.0000001)
return true;
else
return false;
}
//计算base的exponent次方
double Basewithunsignedintexponent(double base, unsigned int absexponent)
{
//当exponent=0的情况
if(absexponent == 0)
return 1.0;
//当exponent=1的情况
if(absexponent == 1)
return base;
//利用快速幂,递归调用函数计算base的exponent/2次方
double value = Basewithunsignedintexponent(base, absexponent>>1);
//计算base的exponent次方
value *= value;
//判断exponent的奇偶性
//如果为奇函数,还要 补上base函数
if((absexponent & 0x1) == 1)
value *= base;
//返回计算结果
return value;
}
};