劍指offer 數值的整數次方

2021-10-02 14:52:31 字數 1215 閱讀 9559

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

保證base和exponent不同時為0

這道題主要考查兩點:第一,考慮了所有可能情況;第二,冪運算。

首先是所有可能情況,這跟平常做數學題的分類討論一樣。有什麼可能的情況呢?冪函式需要考慮的是冪係數 (exponent) 小於 0,等於 0 和大於 0 三種情況,而底 (base) 則分為等於 0 和 不等於 0 兩種情況。

base = 0:

① exponent>0:返回 0

② exponent<0:報錯(0 不能為分母)

注:題目說明了 exponent = 0 不用考慮

base ≠ 0:

① exponent>0:返回 base^exponent

② exponent=0:返回 1

③ exponent<0:返回 1/(base^exponent)

根據上述分析的可能情況求解就可以。實現**(冪運算未優化):

class

solution

return0;

}else

if(exponent==0)

else

// 下面if-else可簡寫為:

// return exponent < 0 ? 1/ res : res;

if(exponent>0)

else}}

};

優化冪運算:指數的二進位制表達是怎麼樣的呢?舉個例子,13 表達為二進位制就是 1101,那麼 10 的 13 次方就是 10^1101 = 10^0001 × 10^0100 × 10^1000。通過位運算,& 1 和 >>1 來諸位讀取指數的二進位制表達。通過 &1 取出二進位制表達中的 1,將該位代表的乘數累乘,最後得到最終結果。

實現**:

class

solution

else

if(exponent==0)

else

exp = exp>>1;

//移位

cur *= cur;

// 每移一次位,代表的冪次高一位,cur加倍

}return exponent<0?

1/res:res;}}

};

劍指offer 數值的整數次方

1 題目描述 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。2 思路 需要考慮到的情況 1 指數為負數的時候,可以先對指數求絕對值,算出次方之後的結果再取倒數。2 當底數是0,指數是負數的時候,可以將無效變數設定為true,並返回0。3...

劍指offer 數值的整數次方

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。將指數大於0,小於0,等於0 底數不為0 的情況分開。其實指數為0的情況不必單獨拎出來 不進入if直接返回result為1.0 真正需要考慮的是,底數為0而指數為負的情況,數學上沒有意義。書...

劍指offer 數值的整數次方

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。1.最直觀的方法,遞迴求解a b a a b 1 當然也可以用迴圈實現。要注意特殊情況,指數為0時乘方結果都是1 指數為負數時的計算,可以先轉化為正數再求倒數,但是底數為0時不能求導。2.效...