leetcode-50 Pow(x, n) 剑指Offer题11 数值的整数次方
2015-11-04 22:51
471 查看
问题描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。Pow(X,n)
问题分析:
问题首先要考虑输入值的合法性,0的0次方可以返回1,可以视作是合法的;但0的负数次幂则是没有意义,因此需要单独挑出来;
此外,double类型数据的比较最好采用相减不大于某个极小值(比如0.00000001)来表示相等,最好不要使用==;
计算一个数的x的n次方,首先要考虑n是否为正数,当n为负数时,将n取为-n转化成正数,x取其倒数1/x(注意去除底数为0的情况,底数为0,n为正时,结果始终返回0);则原问题即转化为pow(1/x,-n)的情况,指数统一的划为正数;
计算幂时,采用x连乘n次的效率太低,可以考虑“二分法”;即:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201511/04/2d1a072d3282a21f222ee10b18d6ebb1)
代码:
递归解法:
非递归解法:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。Pow(X,n)
问题分析:
问题首先要考虑输入值的合法性,0的0次方可以返回1,可以视作是合法的;但0的负数次幂则是没有意义,因此需要单独挑出来;
此外,double类型数据的比较最好采用相减不大于某个极小值(比如0.00000001)来表示相等,最好不要使用==;
计算一个数的x的n次方,首先要考虑n是否为正数,当n为负数时,将n取为-n转化成正数,x取其倒数1/x(注意去除底数为0的情况,底数为0,n为正时,结果始终返回0);则原问题即转化为pow(1/x,-n)的情况,指数统一的划为正数;
计算幂时,采用x连乘n次的效率太低,可以考虑“二分法”;即:
代码:
递归解法:
public class Solution { private final static double MAX_DIS = 0.000000001; public double myPow(double x, int n) { // 不合法情况:当底数为0,指数为负值时 if (isEqual(x, 0.00) && n < 0) return 0.00; return power(x, n); } private double power(double x, int n) { if (n == 0) return 1.0; if (n < 0) { n = -n; x = 1.0 / x; } double temp = power(x, n / 2); return (n & 0x1) == 1 ? (temp * temp * x) : (temp * temp); } // 判断两个double类型的数值是否相同,不能仅仅使用==来判断 private boolean isEqual(double a, double b) { return (Math.abs(a - b) < MAX_DIS); } }
非递归解法:
private double power(double x, int n) { if (n < 0) { n = -n; x = 1.0 / x; } double result = 1.0; for (double base = x;n > 0; n >>= 1) { if ((n & 0x1) == 1) result *= base; base *= base; } return result; }
相关文章推荐
- Bootstrap导航栏实例讲解
- Jsoup获取全国地区数据(省市县镇村)(续) 纯干货分享
- JavaScript中的this
- <HTML5秘籍>——第6章(美妙的CSS3字体和特效)
- React-native单元测试框架-Jest
- LightOJ - 1291 Real Life Traffic(边双连通+缩点)
- 彻底理解JavaScript原型
- AngularJS API之extend扩展对象
- javascript(六)正则表达式
- 自定义SwitchPreference时遇到的问题
- Node.js学习笔记之三:事件_EventEmitter
- javascript(五)undefined false 字符串变量
- 上传文件中使用ajaxfileupload.js碰到的问题
- 在IE6/7中兼容JSON.parse和JSON.stringify
- Delete Node in a Linked List
- JavaScript中声明全局变量的三种方式(包括显示和隐式)
- AngularJS API之equal比较对象
- node在安装完成后,出现node不是内部或外部命令
- 比较好的前端开发工具
- 字符流中第一个不重复的字符(哈希表+vecor+剑指offer)