題目描述:
實現函式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...