算法题目---数值的整数次方
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);
}
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);
}
相关文章推荐
- 【算法】求数值的整数次方
- 【编程题目】数值的整数次方——关于代码完整性及错误处理方式的探讨(C++实现)
- 算法题20 数值的整数次方
- 九度OJ-题目1514:数值的整数次方
- 题目1514:数值的整数次方-九度
- 九度_题目1514:数值的整数次方
- 九度OJ 1514 数值的整数次方【算法】
- 算法学习记录十(C++)--->数值的整数次方
- 重拾算法之剑指Offier——数值的整数次方
- 微软等数据结构+算法面试100题(26)--数值的整数次方
- 九度OJ 1514 数值的整数次方【算法】
- 数值的整数次方(算法)
- 题目1514:数值的整数次方
- 剑指offer-算法题练习:part12 数值的整数次方
- 题目1514:数值的整数次方
- 数据结构——算法之(037)(数值的整数次方)
- 算法:数值的整数次方
- 算法(位运算)--- 数值的整数次方
- 【剑指Offer面试编程题】题目1514:数值的整数次方---九度OJ
- 算法题20 数值的整数次方