iii.run
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题目
实现一个函数,输入一个整数,输出该数二进制表示中1的个数
题目分析
拿到这个题目,所有人肯定立马有了思路,几个关键词立马在脑海中显现:“循环”,“右移”,“与”。然后很快写出了函数,随便输入几个数验证,没问题。。。但是这个题目需要注意的首先是整数,包括正整数和负整数,其次在python中,数据位数是一个比较模糊的概念,在程序中基本不存在,因为越位之后他会自动将int转为为long类型,所以对python程序员来说,需要提前搞明白整数的位数,或者在python语言中调用C语言,下面来列举其中的集中解法。
cpp
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while (n)
{
n = n&(n - 1); // 每进行一次,将最右侧存有1的bit的值置为0,直到全0,退出循环
count++;
}
return count;
}
};
class Solution2 {
public:
int NumberOf1(int n) {
int count = 0;
unsigned int flag = 1;
while (n) {
count++;
n = n << 1;
}
return count;
}
};
python
# -*- coding:utf-8 -*-
from ctypes import *
class Solution:
def NumberOf1(self,n):
cnt = 0
while c_int(n).value:
cnt +=1
n = n & (n-1)
return cnt
from ctypes import *
def count(num):
cnt = 0
flag = 1
while c_int(flag).value:
if c_int(num & flag).value:
cnt += 1
flag = flag << 1
return cnt
网友评论