题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
幂的情况无非是三种:正数、0和负数。当幂是0的时候,直接返回1;当幂是负数的时候,需要先把其转化为正数来处理,然后返回其倒数就可以了,但base为0时,对0求倒数会导致程序运行出错;当幂是正数的时候,按照正常的计算方法就可以。实际上这道题主要考察时代码的健壮性——就是对幂的情况的考虑是否周全。
boolean g_InvalidInput = false;
boolean IsEqual(double num1, double num2)
{
if ( (num1 - num2 > -0.000001)
&& (num1 - num2 < 0.000001))
{
return true;
}
else
return false;
}
double Power(double base, int exponent)
{
g_InvalidInput = false;
if ( IsEqual(base,0.0) && exponent < 0 )
{
g_InvalidInput = true;
return 0.0;
}
if(exponent>0)
int absExponent = exponent;
if ( exponent < 0 )
{
absExponent = -exponent;
}
double result = PowerWithUnsignedExponent(base, absExponent);
if ( exponent < 0)
{
result = 1.0/result;
}
return result;
}
double PowerWithUnsignedExponent(double base, 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;
}