牛客华为机试HJ62
作者:互联网
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)
标签:bin,stdin,sys,牛客,solve,result,HJ62,机试,line 来源: https://www.cnblogs.com/junstat/p/16172590.html