leetcode 快速冪運算(位運算)

2021-10-06 20:12:03 字數 653 閱讀 4961

題目描述:

實現函式double power(double base, int exponent),求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。

實現**:

def mypow(self, x: float, n: int) -> float:

if x == 0:

return 0

res = 1

if n<0:

x,n = 1/x,-n

while n:

if n&1:

res *= x

x *= x

n >>= 1

return res

解題思路:

按照常規方法,我們肯定是用迴圈,這是最直觀的

但是這裡我們可以做簡化,比如2^9,可以把指數9轉化成1001(b),2^-9可以變成1/2 ^ 9

注意特殊情況,底數為0則值為0;指數為負數需要轉換一下

所以演算法流程就很簡單了,迴圈次數變成logn,且位運算非常高效

位運算以及快速冪

1.原始碼,補碼,反碼 原始碼 原來的那個 反碼 正數的反碼是它本身,負數的反碼為 除了符號位之外,其他位取反。補碼 正數的補碼不變,負數的補碼 反碼 1 2.位運算 邏輯運算 and 只有兩個都為1,結果為1。xor 1xor1 0 0zor0 0 1xor0 1 0xor1 1 or 0or0 ...

快速冪模版與位運算

powered by ab in 局外人 include typedef long long ll using namespace std const ll maxn 5e6 10 char buf 1 21 p1 buf,p2 buf inline ll getc inline ll read w...

位運算和基於位運算的快速冪演算法

與運算 按位與 或運算 按位或 異或運算 按位異或 取反運算 按位取反 左移 右移 移位運算 介紹完二進位制中的基本位運算後,我們開始講解快速冪的演算法 快速冪是基於二進位制的運算的一種快速演算法 如 3 7 2187 7的二進位制為 0111 3 1 3 2 0 3 3 2 3 2 1 9 3 4...