// 面试题16:数值的整数次方
// 题目:实现函数double Power(double base, int exponent),求base的exponent
// 次方。不得使用库函数,同时不需要考虑大数问题。 #include <iostream>
#include <cmath> bool g_InvalidInput = false;
bool equal(double num1, double num2);
double PowerWithUnsignedExponent(double base, unsigned int exponent); double Power(double base, int exponent)
{
g_InvalidInput = false; if (equal(base, 0.0) && exponent < )
{
g_InvalidInput = true;
return 0.0;
} unsigned int absExponent = (unsigned int) (exponent);
if (exponent < )
absExponent = (unsigned int) (-exponent); double result = PowerWithUnsignedExponent(base, absExponent);
if (exponent < )
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;
}
*/ double PowerWithUnsignedExponent(double base, unsigned int exponent)
{
if (exponent == )
return ;
if (exponent == )
return base; double result = PowerWithUnsignedExponent(base, exponent >> );
result *= result;
if ((exponent & 0x1) == )
result *= base; return result;
} bool equal(double num1, double num2)
{
if ((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001))
return true;
else
return false;
} // ====================测试代码====================
void Test(const char* testName, double base, int exponent, double expectedResult, bool expectedFlag)
{
double result = Power(base, exponent);
if (equal(result, expectedResult) && g_InvalidInput == expectedFlag)
std::cout << testName << " passed" << std::endl;
else
std::cout << testName << " FAILED" << std::endl;
} int main(int argc, char* argv[])
{
// 底数、指数都为正数
Test("Test1", , , , false); // 底数为负数、指数为正数
Test("Test2", -, , -, false); // 指数为负数
Test("Test3", , -, 0.125, false); // 指数为0
Test("Test4", , , , false); // 底数、指数都为0
Test("Test5", , , , false); // 底数为0、指数为正数
Test("Test6", , , , false); // 底数为0、指数为负数
Test("Test7", , -, , true); return ;
}

本人答案:

 #include"iostream"
#include"stdio.h"
#include"stdexcept"
using namespace std; bool errorFlag=false; double GetPower(double base,int exponent)
{
if(exponent==)
return 1.0;
if(exponent==)
return base; double result=GetPower(base,exponent>>);
result*=result;
if(exponent&)
result*=base;
return result;
} bool Equal(double num1,double num2)
{
if((num1-num2)>-0.000001&&(num1-num2)<0.000001)
return true;
return false;
} double Power(double base,int exponent)
{
errorFlag=false;
double result=;
// cout<<exponent<<endl;
if(Equal(base,)&&exponent<)
{
errorFlag=true;
return ;
}
if(exponent<)
{
result=1.0/GetPower(base,-exponent);
}
else
{
result=GetPower(base,exponent);
}
return result;
} void Test(char *testName,double base,int exponent,double expectResult,bool expectFlag)
{
//注意这里需要后判断flag,不然前面函数没执行,errorFlag值不会得到更新
if(Equal(Power(base,exponent),expectResult)&&errorFlag==expectFlag)
{
cout<<testName<<":passed."<<endl;
}
else
{
cout<<testName<<":failed."<<endl;
}
} int main()
{
Test("Test1",-,-,0.25,false);
Test("Test2",-,,-,false);
Test("Test3",-,,,false);
Test("Test4",,-,,true);
Test("Test5",,,,false);
Test("Test6",,,,false);
Test("Test7",,,,false);
Test("Test8",,-,0.5,false);
Test("Test9",,,,false);
return ;
}

最新文章

  1. jfinal 解决ajax 跨域访问--jsonp
  2. [蟒蛇菜谱]Python函数参数传递最佳实践
  3. [课程设计]Scrum 1.6 多鱼点餐系统开发进度(点餐页面按钮添加&amp;修复)
  4. Hibernate逍遥游记-第6章 通过Hibernate操纵对象(select-before-update)
  5. Jersey(1.19.1) - Use of @Context
  6. 让ubuntu使用root帐号并让winscp以root身份登录
  7. UVa 10285 - Longest Run on a Snowboard
  8. java 数据库编程 学习笔记 不断更新
  9. POJ 3662 Telephone Lines【Dijkstra最短路+二分求解】
  10. Microsoft+R:Microsoft R Open (MRO)安装和多核运作
  11. Jmeter使用JDBC请求简介
  12. OpenCV-Python-图像梯度
  13. apache开启重写模式
  14. docker命令相关
  15. notepad++64位添加plugin manager
  16. 两个有序数组的中位数(第k大的数)
  17. less命令详解
  18. 2.Observer Pattern(观察者模式)
  19. VIM下的普通模式的相关知识
  20. linux性能系列--块设备

热门文章

  1. LWIP网络接口管理
  2. 设计模式(java)--Bridge模式之蜡笔与毛笔的故事
  3. 实践作业4:Web测试实践(小组作业)每日任务记录1
  4. 白盒测试实践--Day3 12/19/2017
  5. Perl 学习笔记-正则表达式处理文本
  6. Visual Studio 2015 开发 ASP.NET 5 有何变化?(转)
  7. yii2项目实战-访问控制过滤器ACF讲解
  8. git 只merge一个commit的方法
  9. Git代码行统计命令集
  10. CentOS 傻瓜式部署uWSGI + nginx + flask