1. 程式人生 > 其它 >【劍指Offer題解:java】數值的整數次方

【劍指Offer題解:java】數值的整數次方

技術標籤:java演算法

題目

給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。

保證base和exponent不同時為0

題解

1、使用內建函式

/**
     * 使用內建函式
     *
     * @param base
     * @param exponent
     * @return
     */
    public double Power(double base, int exponent) {
        return Math.pow(base, exponent);
    }

2、暴力法

暴力法:直接相乘

注意

如果次方為負數時,我們改寫成原數倒數的exponent方
在這裡插入圖片描述

處理程式碼

if (exponent < 0) {//如果為負數,需要進行處理
     base = 1 / base;
     exponent = -1 * exponent;
}

完整程式碼

  /**
     * 暴力法:直接相乘
     *
     * @param base
     * @param exponent
     * @return
     */
    public double Power2(double base, int exponent) {
        //1、判斷次方的正負
if (exponent == 0) return 1.0; if (exponent < 0) {//如果為負數,需要進行處理 base = 1 / base; exponent = -1 * exponent; } double sum = 1.0; //直接迴圈即可 for (int i = 0; i < exponent; i++) { sum *= base; } return sum; }

3、遞迴法(冪指數)

在這裡插入圖片描述

 /**
     * 遞迴法:快速冪
     *
     * @param base
     * @param exponent
     * @return
     */
    public double Power3(double base, int exponent) {
        if (exponent == 0) return 1.0;
        if (exponent < 0) {//先對次方做處理
            exponent = -1 * exponent;
            base = 1 / base;
        }
        return q_power(base,exponent);
    }

    public double q_power(double b, int e) {
        if (e == 0) return 1.0;
        double ret = Power3(b, e / 2);
        if (e % 2 == 0) {//偶數
            return ret * ret;
        } else {//奇數
            return ret * ret * b;
        }
    }