标题叙述性说明:

实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数。同一时候不须要考虑大数问题。

分析描写叙述:

对于实现一个函数,首先要做的就是全面考虑它的參数的所有可能。对于此题中的数值函数,应该考虑的參数有整数、0、负数、浮点型、整型、是不是大数问题等。

假设exponent是负数,则所求的幂函数中。base不能是0。否则就会出现0做除数的问题。对于这样的错误,能够通过指定标志的方法给出。

假设exponent是负数。应该求base的(-exponent)的幂数的倒数。另外,假设base为0.0,exponent也为0时,没有意义,

int flag = 0;//标志位,假设base和exponent都为0时,设置该位

double power(double base, int exponent)
{
if(equal(base, 0.0) && exponent < 0){/*此处不能简单的用base == 0.0来比較*/
flag = 1;
return 0.0;
} unsigned int absexponent = (unsigned int)exponent;
if(exponent < 0)
absexponent = (unsigned int)(-exponent);/*假设exponent小于零,求它的绝对值*/ double result = PowerWithUnsignedExponent(base, absexponent);
if(exponent < 0)
result = 1.0 / result; return result;
} double PowerWithUnsignedExponent(double base, unsigned int absexponent)
{
double result = 1.0;
int i;
for(i = 1; i <= absexponent; ++i)
result *= base; return result;
} int equal(double num1, double num2)
{
if((num1 - num2 > -0.0000001) /*比較两个浮点数是否相等的方法*/
&&(num1 - num2) < 0.0000001)
return 1;

上面的方法尽管能解决这个问题,但并不高效。假设exponent比較大,能够用第二种方法解决:

double PowerWithUnsignedExponent(double base, unsigned int absexponent)
{
if(absexponent == 0)
return 1;
if(absexponent == 1)
return base; double result = PowerWithUnsignedExponent(base, absexponent >> 1);
result * = result;
if(absexponent & 0x1 == 1)
result *= base; return result;
}

总结:上述程序所使用了错误的方法的第一段:全局变量的方法。还有另外两个办公事务处理方法:回报值法国、异常处理方法。

【剑指offer】的功率值的更多相关文章

  1. 【剑指offer】二叉树中和为某一值的路径

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26141815 题目描写叙述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数 ...

  2. 剑指offer 二叉树中和为某一个值的路径

    剑指offer 牛客网 二叉树中和为某一个值的路径 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 15:53:58 2 ...

  3. 【Java】 剑指offer(34) 二叉树中和为某一值的路径

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有 ...

  4. 剑指Offer - 九度1368 - 二叉树中和为某一值的路径

    剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...

  5. 【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径

    题目链接地址: http://ac.jobdu.com/problem.php? pid=1368 题目1368:二叉树中和为某一值的路径 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2252 ...

  6. 剑指Offer:二叉树中和为某一值的路径【34】

    剑指Offer:二叉树中和为某一值的路径[34] 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. ...

  7. 剑指Offer(二十四):二叉树中和为某一值的路径

    剑指Offer(二十四):二叉树中和为某一值的路径 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...

  8. Go语言实现:【剑指offer】二叉树中和为某一值的路径

    该题目来源于牛客网<剑指offer>专题. 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路 ...

  9. 【剑指Offer面试编程题】题目1368:二叉树中和为某一值的路径--九度OJ

    题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 输入: 每个测试案例包括n+1行: 第一行为2 ...

  10. 剑指 Offer 34. 二叉树中和为某一值的路径 + 记录所有路径

    剑指 Offer 34. 二叉树中和为某一值的路径 Offer_34 题目详情 题解分析 本题是二叉树相关的题目,但是又和路径记录相关. 在记录路径时,可以使用一个栈来存储一条符合的路径,在回溯时将进 ...

随机推荐

  1. Android布局解析,图文(转)

    LinearLayout:相当于Java GUI中的FlowLayout(流式布局),就是说一个组件后边跟一个,挨着靠,一个组件把一行占满了,就靠到下一行. linearlayoutdemo.xml ...

  2. Android采访开发——2.通用Android基础笔试题

    注意finddreams博客: http://blog.csdn.net/finddreams/article/details/44219231 正值跳槽的热季.整理一下Android面试中最常考的笔 ...

  3. 新秀发挥云17号:RHEL改变以太网地址克隆虚拟机后,

    新秀发挥云17号:RHEL改变以太网地址克隆虚拟机后, (一)变化hostname # vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=your-v ...

  4. cocos2dx 解释二具体的启动过程:内存管理和回调

    在上一篇的第二部分中.我们有一句代码待解释的: // Draw the Scene void CCDirector::drawScene(void) { -...     //tick before ...

  5. 《高性能 JavaScript》读书笔记(一)

    一. 加载和执行——优化JavaScript规则: 1. 将脚本放在底部:2. 减少页面中外链脚本文件的数量: 比如,下载单个100kb的文件将比下载4个25kb的文件更快.这个可以通过离线打包工具或 ...

  6. Javascript学习6 - 类、对象、继承

    原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...

  7. 承诺c指针 (1)指针是地址

    (1)是地址 首先明白一个观点:指针就是地址.这是理解指针的起始一步. 直观感受下.变量的地址 int main() { int foo; int *foo_p; foo = 5; foo_p = & ...

  8. c#有关udp可靠传输(包传输数据包) 升级

    在c#有关udp可靠传输(包传输数据包)我们讨论,UDP包的发送,可是上一个程序有一个问题.就是数据比較大.一个Message类序列化后都有2048B,而实际的数据量也就只是 50B罢了,这就说明当中 ...

  9. Android 内存管理 &amp;Memory Leak &amp; OOM 分析

    1.Android 流程管理&内存 Android主要应用在嵌入式设备其中.而嵌入式设备因为一些众所周知的条件限制,通常都不会有非常高的配置,特别是内存是比較有限的. 假设我们编写的代 码其中 ...

  10. Ubuntu中编译链接Opencv应用的简便方式

    安装完毕Opencv后,使用下面命令查 看编译/连接參数 pkg-config --cflags --libs opencv 可看到例如以下信息 -I/usr/include/opencv  /usr ...