Python程序员面试算法宝典---解题总结: 第6章 基本数字运算 6.10 如何求二进制数中的1的个数

# -*- coding: utf-8 -*-

'''
Python程序员面试算法宝典---解题总结: 第6章 基本数字运算 6.10 如何求二进制数中的1的个数

题目:
给定一个整数,输出这个整数的二进制表示中1的个数。例如:
给定整数7,其二进制表示为111,因此输出结果为3.

分析:
最简单的方式,暴力破解,将10进制数转换为2进制数,
然后遍历二进制数的每个比特位。


关键:
1 书上解法
每次n&(n-1)都会使得结果少一位1,而且是最后一位,
因为n与n-1最后一位肯定不同。
直到n&(n-1)的结果为0,记录期间的次数即为1的个数

2 没有想到
是因为忘记了n&(n-1)每次使得结果的最后1位少1个1。

参考:
Python程序员面试算法宝典
'''

def countOne(n):
    count = 0
    while n > 0:
        if n != 0:
            n = n & (n-1)
        count += 1
    return count


def process():
    n = 7
    result = countOne(n)
    print result


if __name__ == "__main__":
    process()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值