劍指Offer學習-面試題16:數值的整數次方

	/**
     * 數值的整數次方
     * <p>
     * 實現函數double power(double base, int n) 求base的n次方,不得使用庫函數,同時不需要考慮大數問題
     *
     * @param base
     * @param n
     * @return
     */
    public double power(double base, int n) {
        if (0 == base) {
            return base;
        }
        boolean flag = false;
        if (n < 0) {
            flag = true;
            n = -n;
        }
        double res = 1;
        for (int i = 0; i < n; i++) {
            res *= base;
        }
        return flag ? 1 / res : res;

    }


    /**
     * base 的 n 次方
     * res *=t                      n=1
     * t=base^8 = base^4 * base^4   n=2
     * t=base^4 = base^2 * base^2   n=4
     * t=base^2 = base * base       n=8
     * 只有當n爲奇數時才相乘res
     *
     * @param base
     * @param n
     * @return
     */
    public double power1(double base, int n) {
        if (0 == base) {
            return base;
        }
        boolean flag = false;
        if (n < 0) {
            flag = true;
            n = -n;
        }
        double res = 1;
        double t = base;
        while (n != 0) {
            if ((n & 1) == 1) {
                res *= t;
            }
            t *= t;
            n >>= 1;
        }
        return flag ? 1 / res : res;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章