剑指offer之 数值的整数次方
问题描述:实现函数double power(double base,int exponent),求base的exponent次方。不能使用库函数,同时不需要考虑大数问题。
package Problem11; public class Power { /* * 问题描述: 实现函数double power(double base,int exponent),求base的exponent * 次方。不能使用库函数,同时不需要考虑大数问题。 */ /** * @param args */ public double power(double base, int exponet) throws Exception { double result = 0.0; if (equals(base, 0) && (exponet < 0)) { throw new Exception("0的负数次幂无意义"); } if (exponet == 0) { return 1.0; } if (exponet < 0) { result = powerWithUnsignedExponent(base, -exponet); } else { result = powerWithUnsignedExponent(base, exponet); } return result; } private double powerWithUnsignedExponent(double base, int exponet) { double result = 1.0; for (int i = 1; i <= exponet; i++) { result = result * base; } return result; } // 由于计算机中表示小数都有误差,不能用等号判断两个小数是否相等。如果两个小数的差的绝对值很小 // 我们就可以认为它们是相等的 private boolean equals(double number1, int number2) { if ((number1 - number2 > -0.00000001) && (number1 - number2) < 0.00000001) { return true; } return false; }