劍指offer 數值的整數次方

2021-08-27 10:56:37 字數 981 閱讀 9699

# -*- coding:utf-8 -*-

class solution:

def power(self, base, exponent):

# write code here

e=abs(exponent)

ans=1.0

while e:

if e&1==1:

ans=ans*base

base=base*base

e=e>>1

if exponent<0:

return 1/ans

else:

return ans

快速冪:以

可以看到,偶數次冪的冪數每一次除2,都是將之前的結果平方,而奇數冪只需單獨乘乙個底數就可以轉化成偶數冪。

計算偶數冪對應base=base*base,奇數冪的時候轉化成偶數冪(此時相當於冪數/2餘1),ans=ans*base

快速冪取模:當冪次太大的時候結果會超出計算機的儲存範圍,常常需要用到快速冪取模的方法,有如下定理:

引理:積的取餘等於取餘的積的取餘。

再在這條引理的基礎之上,對指數型資料進行拆分以及合併,從而得到我們用的快速冪演算法。

(a*b)%c = ((a%c)*(b%c))%c

# -*- coding:utf-8 -*-

class solution:

def power(self, base, exponent):

# write code here

ans=1.0

e=abs(exponent)

while(e>0):

if e&1:

ans=ans*e

ans=ans%mod

base=base%mod

base=base%mod

e>>1

return ans%mod

劍指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.效...