// 面试题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 ;
}

剑指offer——面试题16:数值的整数次方的更多相关文章

  1. 剑指Offer:面试题11——数值的整数次方(java实现)

    题目描述: 实现函数double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题 思路:本题的重点考察内容是 ...

  2. 剑指Offer - 九度1514 - 数值的整数次方

    剑指Offer - 九度1514 - 数值的整数次方2013-11-30 00:49 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponen ...

  3. 剑指offer_面试题11 数值的整数次方_考察代码的完整性

    测试通过代码: package t0825; public class Power { public static void main(String[] args){ System.out.print ...

  4. 剑指offer(12)数值的整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目分析 这道题用传统的方法也可以做,只不过效率太低,这里我们用到快速幂的方法 ...

  5. 剑指offer十二之数值的整数次方

    一.题目 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 二.思路 1.传统方法计算,时间复杂度O(n) 2.递归方式计算,时间复杂度O ...

  6. 【剑指Offer】12、数值的整数次方

      题目描述:   给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.   解题思路:   本题看似比较简单,是一个简单的指数运算,但需要完 ...

  7. 【剑指offer】面试题 16. 数值的整数次方

    面试题 16. 数值的整数次方 题目描述 题目:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解答过程 下面的讨论中 x 代表 bas ...

  8. 剑指offer 面试题43. 1~n整数中1出现的次数

    leetcode上也见过一样的题,当时不会做 看了一下解法是纯数学解法就没看,结果剑指offer上也出现了这道题,那还是认真看下吧 对于数字abcde,如果第一位是1,比如12345,即计算f(123 ...

  9. C++版 - 剑指offer 面试题16:反转链表(Leetcode 206: Reverse Linked List) 题解

    面试题16:反转链表 提交网址: http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=13&tqId= ...

随机推荐

  1. [原创]COCOS2DX 3.8 增加protobuf为external库

    此处为记录防止忘记,最近使用COCOS练习一些新的库,所以需要把PROTOBUF编译进去,看上去很麻烦,这里记录一下,以防忘记. 首先下载protobuf 2.5.0版本,下载地址请自行百度. 准备工 ...

  2. python 学习之路开始了

    python 学习之路开始了.....记录点点滴滴....

  3. 1256 Anagram

    题目链接: http://poj.org/problem?id=1256 题意: 根据自定义的字典序: 'A'<'a'<'B'<'b'<...<'Z'<'z' 和输 ...

  4. spring Aop概念

    面向切面编程(AOP)通过提供另外一种思考程序结构的途经来弥补面向对象编程(OOP)的不足.在OOP中模块化的关键单元是类(classes),而在AOP中模块化的单元则是切面.切面能对关注点进行模块化 ...

  5. ACM 超级楼梯 发工资

    超级楼梯 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input 输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M( ...

  6. SPOJ - AMR11A(DP)

    Thanks a lot for helping Harry Potter in finding the Sorcerer's Stone of Immortality in October. Did ...

  7. spark 编译命令

    mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

  8. Java算法 -- 顺序表

    顺序表结构定义:就是按照顺序存储方式存储的线性表 1.定义一个顺序表的基本数据: static final int MAXLEN = 100; Class Student{ private Strin ...

  9. ecahrt 扇形(半扇形)

    var data = [{ "name": "1", "value": 54 }, { "name": "2& ...

  10. Log4net日志

    log4net简介(摘抄于百度百科):      log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库 ...