您的位置:首页 > 其它

算法题目---数值的整数次方

2017-07-05 10:38 369 查看
//考虑不周

double Power1(double base,int exponent)

{

double result = 1.0;

for(int i = 1;i<exponent;++i)

result *= base;

return result;

}

//判断浮点数是否相等

bool equal(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;

for(int i =1;i<exponent;++i)

result *= base;

return result;

}

bool g_InvalidInput = false;

double PowerWithUnsignedExponent2(double base,unsigned int exponent);

double Power2(double base,int exponent)

{

//全局变量

g_InvalidInput = false;

if(equal(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 = PowerWithUnsignedExponent(base,absExponent);

double result = PowerWithUnsignedExponent2(base,absExponent);

if(exponent < 0)

result = 1.0 / 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;

}

void Test(double base, int exponent, double expectedResult, bool expectedFlag)

{

//double result = Power1(base, exponent);

double result = Power2(base, exponent);

if(abs(result - expectedResult) < 0.00000001 && g_InvalidInput == expectedFlag)

printf("Test passed.\n");

else

printf("Test failed.\n");

}

int main()

{

printf("Test1 begins.\n");

Test(2, 3, 8, false);

printf("Test2 begins.\n");

Test(-2, 3, -8, false);

printf("Test3 begins.\n");

Test(2, -3, 0.125, false);

printf("Test4 begins.\n");

Test(2, 0, 1, false);

printf("Test5 begins.\n");

Test(0, 0, 1, false);

printf("Test6 begins.\n");

Test(0, 4, 0, false);

printf("Test7 begins.\n");

Test(0, -4, 0, true);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: