题目:实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
自以为题目简单的解法
double Power(double base,int exponent)
{
double result=1.0;
for(int i=1;i<=exponent;++i)
result*=base;
return result;
}
全面但不够高效的解法,我们离Offer已经很近了
bool g_InvalidInput=false;
double Power(double base,int exponent)
{
g_InvalidInput=false;
if(equal(base,0.0)&&exponent<0)//底数为0
{
g_InvalidInput=true;
return 0.0;
}
unsigned int absExponent=(unsigned int)(exponent);
if(exponent<0)//指数为负数
absExponent=(unsigned int)(-exponent);
double result=PowerWithUnsignedExponent(base,absExponent);
if(exponent<0)
result=1.0/result;
return result;
}
double PowerWithUnsignedExponent(double base,unsigned int exponent)
{
double result=1.0;
for(int i=1;i<=exponent;++i)
result*=base;
return result;
}
既全面又高效的解法,确保我们能拿到Offer
double PowerWithUnsignedExponent(double base,unsigned int exponent)
{
if(exponent==0)
return 1;
if(exponent==1)
return base;
double result=PowerWithUnsignedExponent(base,exponent>>1);
result*=result;
if(exponent&0x1==1)//奇数
result*=base;
return result;
}