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) # 相減就是答案
微信扫码关注
抖音扫码关注