1. 程式人生 > 其它 >牛客華為機試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)