剑指offer面试题11 数值的整数次方的Java代码实现
2016-07-09 19:39
696 查看
数值的整数次方的Java代码实现
剑指offer这本书不错。以下是我对这道题的Java代码实现/** * 剑指offer中面试题11:数值的整数次方double power(double base,int exponent) * 注意事项: * 1.指数exponent可能为正数,负数和0。数值的负数次方,可以先求绝对值,然后求倒数(但是底数为0异常,查看2)。 * 2.底数base可能为0,正数和负数。底数为0时,若此时指数为负数,导致异常。1/0没有意义。 * 3.尽量高效的计算乘幂。 * 4.出错处理方式有三种: * (1)返回值,不能方便的使用返回结果。 * (2)全局变量,用户容易忘记判断,导致潜在的错误。 * (3)try catch。有些语言(c语言)不支持,导致性能影响 * 5.double和float类型的数值判断为0,不能直接用==0?判断。因为计算机表示小数有误差。 * 步骤: * 1.判断exponent是否为负数; * 2.判断base是否为0; * 3.利用数的偶数次方等于其二分之一次方的平方 * * * @return */ boolean gInvalidInput=false; public double power(double base,int exponent) { gInvalidInput=false;//调用全局变量时重新赋值为false,以免值非初始值,导致错误 if(equals(base, 0.0)&&exponent<0) { gInvalidInput=true; return 0.0; } if(exponent<0) { int positiveInt=Math.abs(exponent); return 1/unsignedIntPower(base, positiveInt); } else { return unsignedIntPower(base, exponent); } } public boolean equals(double base,double other) { if(((base-other)<0.0000001)||((other-base)>-0.0000001)) { return true; } return false; } //使用递归的方法 public double unsignedIntPower(double base,int exponent) { if(exponent==0) return 1.0; if(exponent==1) return 1*base; double result=unsignedIntPower(base, exponent>>1); result *=result; //判断exponent是否为偶数,奇数 if((exponent&0x1)==1) { //为奇数情况 result*=base; } return result; }
相关文章推荐
- 剑指offer中,求输入整数的二进制形式中1的个数(Java代码)
- 剑指offer 面试题23 从上往下打印二叉树 Java实现
- 剑指offer面试题 22 栈的压入、弹出序列的匹配
- 剑指offer 面试题21 包含min函数的栈 Java实现
- 剑指offer第19题 输出二叉树的镜像 java解法
- 剑指offer第12题 最优解
- 剑指offer面试题12 使用BigInteger来实现 打印1到最大的n位数
- 剑指offer之面试题21:包含min函数的栈
- 求一个字符串中出现频率最高的字符
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 大公司移动前端开发面试题——做转盘[参考代码]
- 剑指offer之面试题20:顺时针打印矩阵
- 关于对象初始化内部顺序的个人见解
- JS面试题集锦