题目
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解题思路
首先明白一个整数类型的(int)是4个字节,也就是32位.
然后分开处理:
- 对于大于等于0的数:直接转换成二进制数可以了,注意高位空的用0来补充,一定要是32位:例如4的二进制数“[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]”(怎么转换的可以看下我下面的代码,或者自己去百度)
- 对于负数,我们要去他的补码:首先将负数取绝对值去其绝对值的二进制数(注意一定要保留32位,高位空的用0来补),然后直接加一个1就可以了(注意进位!)
# -*- coding:utf-8 -*-
def ZhengSConvert(n):
s=[]
while True:
s.append(n%2)
n=n//2
if n==0:
break
a=[0]*64
s.extend(a)
return s[:32]
def counterOne(L):
if L is None or L==[]:
return 0
num=0
for v in L:
if v==1:
num+=1
return num
class Solution:
def NumberOf1(self, n):
# write code here
s=None
if n>=0:
s=ZhengSConvert(n)
print(s)
return counterOne(s)
else:
n=0-n
s=ZhengSConvert(n)
print(s)
s=[(x+1)%2 for x in s]
print(s)
c=1
for i,v in enumerate(s):
if c==0:
break
temp=v+c
s[i]=temp%2
c=temp//2
print(s)
return counterOne(s)