劍指Offer 12 數值的整數次方

2021-09-24 16:06:54 字數 1704 閱讀 8582

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

思路:

有兩種方法來解決這個問題:

1、第一種是暴力方法,就是用for迴圈,乙個迴圈base乘一遍,這樣就會得到結果,需要判斷exponent是否為負數,如果為負數,那麼求得的結果需要去倒數。

2、第二種方法是對第一種方法進行了優化,其思路是數學上的乙個定理,可以簡化運算,減少迭代次數,定理如下:

也就是說原本用for迴圈的問題可以通過計算一次然後兩個計算結果相乘,用遞迴來解決問題,遞迴的突破條件是exponent為1的情況,最開始exponent為0的情況在第一次判斷exponent是否為0時被使用。另外exponent右移一位:exponent>>1代表exponent除2。

牛客網的code貌似對base為0的情況沒有考慮,不做base為0情況檢查也能通過,我覺得這樣並不嚴謹,還是加上比較好,方法二其實可以寫成兩個函式,這樣能使判斷更少、**更優,原諒我很懶,沒有優化**,不過思路還是可以參考的。

solution:

python

(1)# -*- coding:utf-8 -*-

class solution:

def power(self, base, exponent):

# write code here

if base == 0:

return 0

if exponent == 0:

return 1

elif exponent == 1:

return base

else:

flag = exponent/abs(exponent) #exponent符號標誌位

tmp = 1

for i in range(abs(exponent)):

tmp = tmp *base

if flag > 0:

return tmp

else: #exponent為負時,返回其倒數

return 1/tmp

(2)# -*- coding:utf-8 -*-

class solution:

def power(self, base, exponent):

# write code here

if base == 0:

return 0

if exponent == 0:

return 1

elif exponent == 1:

return base

else:

flag = exponent/abs(exponent)

result = self.power(base,abs(exponent)>>1)

if exponent % 2 == 0: #偶數

result = result*result

else: #奇數

result = result*result*base

if flag > 0:

return result

else:

return 1/result

劍指Offer (12)數值的整數次方

題目描述 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。實現如下 方法一 迴圈 此題不需要考慮計算後值溢位的情況,即不存在大數情況 異常情況 底數為0時 0.0 指數為0時 1.0 數學定義 指數為負數時,需要考慮先計算指數絕對值的結果...

劍指offer 12 數值的整數次方

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。1 對數字的預處理,比如,0的負數次方等 2 提高計算n的m次方的效率方法一 遞迴。利用公式 ab b 2 0 ab 2 ab 2 a b 1 2 a b 1 2 aclass soluti...

劍指Offer 12 數值的整數次方

description給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。用divide conquer的思路可以每次平方,最後堆起來得到答案。最開始的時候我搞不太清exp 0,1這種情況怎麼合併,所以就單獨分了出來。c double pow...