题目

从标准输入读入一个非负整数 n,统计并输出其二进制表示中数字 1 的个数(汉明重量)。

输入格式:一行输入一个非负整数 n。

输出格式:输出一个整数,表示其二进制中 1 的数量,末尾换行。

数据范围与约定:0 ≤ n ≤ 4×109。

思路与算法

1. 内置计数方法
Pythonic 方式:bin(n).count("1"),直接统计内置二进制字符串中的字符 1。

2. Brian Kernighan 位运算算法
循环执行 n &= n - 1,每一步消去最低位的 1,直到 n 为 0,循环次数精确等于 1 的个数。

完整程序

# 逆向倒推猴子吃桃:第 10 天剩 1 个
# 前一天的桃子数为:(当天的桃子数 + 1) * 2
peach = 1
for _ in range(9):
    peach = (peach + 1) * 2

print(peach)

运行示例

输入:

13

输出:

3