剑指Offer原题,不利用API或者暴力统计的话,稍微扩展一种巧妙的解法吧。刚好面试的时候也要求用位运算用小于O(n)的方法求解。

注意python2.7不能有中文注释

n = int(raw_input()) # Notice: raw_input() for python 2.7
cnt = 0
while n: # 复杂度会小于二进制的总位数
    n = n & (n-1) # 每次可将最右边的1消去
    cnt += 1
print(cnt)