题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
考虑的几种情况:
1. base和0的大小
2.exponent是否为负数
class Solution {
public:
bool isequal(double num1,double num2)
{
if(num1-num2<0.0000001&&num1-num2>-0.0000001)
return true;
else
return false;
}
//计算正指数的整数次方
double PowerWithUnsignedExponent(double base,unsigned int exponent)
{
double result=1.0;
unsigned int i;
for(i=1;i<=exponent;++i)
result*=base;
return result;
}
//利用乘方性质计算整数次方
double PowerWithUnsignedExponent2(double base,unsigned int exponent)
{
if(exponent==0) return 1;
if(exponent==1) return base;
double result=PowerWithUnsignedExponent2(base,exponent>>1);
result*=result;
if((exponent&0x1)==1)//指数为奇数
result*=base;
return result;
}
bool g_InvalidInput=false;//使用全局变量处理错误
double Power(double base, int exponent) {
if(isequal(base,0.0)&&exponent<0)
{
g_InvalidInput=true;
return 0.0;
}
unsigned int absExponent=(unsigned int) (exponent);
if(exponent<0)
absExponent=(unsigned int) (-exponent);
double result=PowerWithUnsignedExponent2(base,absExponent);
if(exponent<0)
result=1.0/result;
return result;
}
};