牛客華為機試HJ62
阿新 • • 發佈:2022-04-21
1. 題目描述
2. Solution 1
1、思路分析
最樸素的想法直接轉換成二進位制字串,統計1的個數。
2、程式碼實現
import sys
if sys.platform != "linux":
sys.stdin = open("input/HJ15.txt")
def solve(n):
n_bin = bin(n).replace("0b", "")
print(n_bin.count('1'))
for line in sys.stdin:
n = int(line.strip())
solve(n)
3. Solution 2
1、思路分析
遍歷int型的32個bit,看看每個bit上面是否是1,並計數。
2、程式碼實現
import sys if sys.platform != "linux": sys.stdin = open("input/HJ15.txt") def solve(n): if n == 0: return 0 result = 0 for _ in range(32): result += n & 1 n >>= 1 print(result) for line in sys.stdin: n = int(line.strip()) solve(n)
4. Solution 3
1、思路分析
bin(5) = 101, bin(5-1)=bin(4)=100,bin(5) & bin(4) = 100。
n & (n-1) 每次消耗掉最右邊,或者說最低位的1。
2、程式碼實現
import sys if sys.platform != "linux": sys.stdin = open("input/HJ15.txt") def solve(n): result = 0 while n != 0: n = n & (n - 1) result += 1 print(result) for line in sys.stdin: n = int(line.strip()) solve(n)