其他分享
首页 > 其他分享> > 牛客华为机试HJ62

牛客华为机试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