您的位置:首页 > Web前端

剑指offer:数值的整数次方(java)

2016-09-29 13:17 357 查看
题目描述:

给定一个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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息