题目
从标准输入读入一个非负整数 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