1. 程式人生 > >劍指offer之 數值的整數次方

劍指offer之 數值的整數次方

light exc sig 整數次方 ase 負數 dexp ret throw

問題描述:實現函數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;
    }

  

劍指offer之 數值的整數次方