a414: 位元運算之進位篇
這篇教學會示範 ZeroJudge 基礎題庫「a414: 位元運算之進位篇」的解題過程。
題目需求
題目會一連串十進制正整數 N,輸出以二進制計算 N+1 時所需的進位次數。
題目連結:a414: 位元運算之進位篇
解答
因為這題的測試資料很多,所以使用 stdin 的方式輸入,避免產生 TLE 超時的狀況。取得輸入資料後,使用 bin 的方法將數字轉換成二進位的字串,轉換字串後,先計算轉換後的長度 x,接著使用 rstrip 的方法將最右邊的 1 都去除,在計算去除 1 的長度 y,兩者相減就是進位的次數。
因為二進位的 1+1 表示進位,進位會一直到碰到 0 為止,所以如果最右邊是 111,加上 1 之後會變成 1000 就是進位三次,如果是 101 加上 1 變成 110 就是進位一次。
from sys import stdin
for s in stdin:
n = int(s) # 將輸入的文字轉換成數字
if n == 0: break # 如果數字為 0 就停止
b = bin(n) # 轉換成二進位文字
x = len(b) # 計算原本長度
y = len(b.rstrip('1')) # 計算進位後移除右邊 1 之後的長度
print(x - y) # 相減就是答案
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~