题目:

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

思路:

看题目似乎很简单,循环相乘不就行了吗?不是的。

需要考虑几个问题:

1、exponent为0或者负数;

2、base为0且exponent为负数,其中判断base是否为0,需要考虑base为double类型;

3、高效的计算方法:分治;

代码:

#include <iostream>
#include <stdlib.h>using namespace std;bool equal(double num1,double num2){if(abs(num1-num2)<0.0000001)return true;elsereturn false;
}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*result;if((absExponent&0x1)==1)result=result*base;return result;
}double Power(double base,int exponent){unsigned int absExponent=(unsigned int)exponent;if(exponent<0)absExponent=(unsigned int)(-exponent);double result=PowerWithUnsignedExponent(base,absExponent);if(exponent<0)result=1.0/result;return result;
}int main()
{cout<<Power(2,-3)<<endl;cout<<Power(0,-1)<<endl;cout<<Power(5,0)<<endl;return 0;
}

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/1a834e5e3e1a4b7ba251417554e07c00?rp=1

AC代码:

class Solution {
public:double Power(double base, int exp) {int exponent=exp>0?exp:(-exp);double p,result;if(exponent==0)return 1;if(exponent==1)return base;p=Power(base,exponent>>1);result=p*p;if(exponent&0x1)result=p*p*base;if(abs(result-0.0)<0.00000001)return result;return exp>0?result:(1/result);}
};

转载于:https://www.cnblogs.com/AndyJee/p/4630812.html

(剑指Offer)面试题11:数值的整数次方相关推荐

  1. 剑指offer面试题[11]-数值的正整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. (自己方法可以通过-比较low)后期补充牛客网解法,先mark一下. clas ...

  2. 剑指offer面试题16. 数值的整数次方(二分法)

    题目描述 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 思路 详见链接 代码 cl ...

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

    快速幂的算法太美了 对于if((b&1)==1)这是判断b是否为奇数: 例如:如果b=8(1000),即指数为8,进入循环时,b不是奇数,那么基数翻倍,现在base值为,然后b右移,此时b为4 ...

  4. 【剑指offer-Java版】11数值的整数次方

    不用库,实现pow()运算 很简单的题目,但是涉及到很多细节 比如 1) 结果非法或者出错的时候如何通知调用者: 可以采用返回特定值的方法-但是此处pow运算既可以返回正数 0 或者负数,所以此思路比 ...

  5. 剑指offer——面试题11:数值的整数次方

    剑指offer--面试题11:数值的整数次方 Solution1:基本算法 累乘,时间复杂度为O(n) 要考虑全部情况:指数 < 0, == 0 和 > 0. 注意在 if-else if ...

  6. 数值的整数次方(剑指offer面试题11)

    实现函数 double Power(double base, int exponent),即乘方运算. 考虑问题 exponet < 0 , 可以转化为 1.0 / Power(base, -1 ...

  7. 剑指Offer - 面试题11. 旋转数组的最小数字(二分查找)

    1. 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] ...

  8. 剑指offer面试题11. 旋转数组的最小数字(二分查找)

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的 ...

  9. 剑指offer——面试题54:表示数值的字符串

    剑指offer--面试题54:表示数值的字符串 参考网址:https://www.nowcoder.com/profile/9717187/codeBookDetail?submissionId=15 ...

  10. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

最新文章

  1. linux 调用redis cli,使用redis-cli定时执行指定命令
  2. Eureka 服务注册与发现02——集群版
  3. CV:利用cv2自带两步法haarcascade_frontalcatface.xml实现对猫脸检测
  4. 一步步安装Ubuntu 13.10服务版
  5. 天龙八部手游显示与服务器断开连接,天龙八部手游怎么设置 游戏设置方法(图文详解)...
  6. 浅谈Linq to Sql 的不足
  7. 政史系列:《社会契约论》读书笔记
  8. Linux在终端搜索的两条命令
  9. LeetCode刷题——62. 不同路径
  10. 环一维数组最大子数组问题
  11. 中间件——activityMQ
  12. 计算机毕业设计Java医院信息管理系统(系统+源码+mysql数据库+Lw文档)
  13. 原生JS将HTML导出生成word文档 有页眉页脚
  14. Windows系统安装失败日志分析
  15. 《路由器开发 - 路由器刷机指南》华硕路由器RT-N66W刷机
  16. application/json和application/x-www-form-urlencoded使用选择
  17. ADP-L610-Arduino
  18. 什么是日活,什么是月活,统计了有什么意义?
  19. Error instantiating servlet class 的解决办法
  20. 帮我从求职者的角度分析一下现在使用人数最多的十大汉语线上教学平台的申请难度...

热门文章

  1. Android一些关于分辨率和布局的设置
  2. VC 无标题栏对话框移动
  3. 思科GNS3和华为eNSP完美结合
  4. 水晶報表之Datetime TO shortDate
  5. 学习.net 2.0需要讲究一下策略
  6. 被暴击了!22岁本科生开源的后台管理系统,太实用!
  7. CTO:不要在代码中写 set/get 方法了,逮一次罚款...
  8. 同事1000行又臭又长 的类!被我用IDEA几分钟重构!真香!
  9. 好烦,一封报警邮件,大量服务节点 redis 响应超时,又得要捉“虫”!
  10. 中国自研数据库超越Oracle登顶全球第一