• 解题:二进制 1 的个数

    2016/12/04 Vinny Hu 29 评论

给定你任意正整数,请你输出这个正整数的二进制表示中有几个1。

样例如下:

输入:

输出:

【解题提示】:

  • 请在评论中先给出你的实现思路;
  • 然后贴出实现的代码;
  • 编程语言不限;
  • 评论支持代码高亮,请点击评论框菜单栏上的 <> 按钮;
1 1 收藏


直接登录
最新评论
  • 疯小子 一个糟糕的程序猿 2016/12/05

    以上是求正整数变量x的二进制表示中1的个数的javascript表达式

    • dwangel Java 2016/12/15

      Java 仿 :P

      StringUtils 是用 commons-lang里的

  • LouisWang 程序员 2016/12/05

    int count = 0;

    while(num > 0) {

    if ( (num & 1) == 1) {

    count++;

    }

    num>>1;

    }

    思路是这样吧,没测试~~

  • unsigned int pop_count(unsigned int v)
    {
    v = v – ((v >> 1) & 0x55555555); // count each 2 bits
    v = (v & 0x33333333) + ((v >> 2)& 0x33333333); // count each 4 bits
    v = (v & 0x0f0f0f0f) + ((v >> 4) & 0x0f0f0f0f); // count each 8 bits

    v = (v * 0x01010101) >> 24; // sum up all 8-bit counters
    return v;
    }

  • 孙鹏 厨子 2016/12/10

    python

    bin(7).count(‘1’)

  • lrscy 学生 2016/12/10

    gcc下有个__builtin_popcount函数,内部似乎通过二进制位运算计算的,效率挺高的~

  • lrscy 学生 2016/12/10

    记得gcc里有个__builtin_popcount函数直接解决~似乎是二进制实现,效率很高~

  • 参考【http://cstriker1407.info/blog/an-interesting-game/

     

  • 学生 2016/12/10

    int onecount(int x){

    int c=0;

    while(x){

    x&=x-1;

    c++;

    }

    return c;

    }

    这样快点

  •       学生一枚 2016/12/11

    while循环  if判断 count统计次数就可以了啊

     

  • Remixˉ   2016/12/11

    #include
    using namespace std;
    int main()
    {
    int i, n=0;
    cin >> i;
    while (i >= 1)
    {
    if (i % 2 == 1)
    n++;
    i /= 2;
    }
    cout << n << endl;
    return 0;
    }

  •  

  •   2016/12/12

    import java.util.Scanner;
    public class YiDeGeShu {

    public static void main(String[] args)
    {
    int c = 0;
    Scanner net = new Scanner(System.in);
    int a = net.nextInt();
    String b = “”;
    while(a > 0)
    {
    b += a%2;
    a= a/2;
    }
    for(int i= 0;i < b.length();i++)
    {
    if( Integer.parseInt(b.substring(i,i+1) ) == 1)
    {
    c++;
    }
    }
    System.out.println(c);

    }

    }

  • 彗星袭月 学生 01/24

    调试楼上的代码 亲测有效

  • 李大雄   02/04

     

     

  • 磊磊   02/07

    temp = input(‘num:’)
    num = int(temp)
    string = bin(num)
    j = 0
    for i in string:
    if i == str(1):
    j+=1
    print j

  • 风中2叔公   02/11

    咋一看真的自然想到用C的位运算,但后想了想,其实题说的那个x位等于1,就是x%2是否余1,于是程序可以简化为:

     

  • di7xian   02/11

     

  • taohongjie   02/11

    SSE4.2加入了POPCNT指令,追求速度就用这个

  • wx_GkLpvHlw   02/19

    把数转换成二进制然后当成10进制取余10。一个循环加起来

  • 阏男秀   02/19

    首先题目给的是正整数,所以不用考虑0和负数的情况。一般思路是:

    如果数字大于零,则循环使用&操作获取数字最右边的二进制位,等于1则计数。

    Python代码

    打印:

    1
    4
    8

  • Integer.toBinaryString(i).length()-Integer.toBinaryString(i).replaceAll(“1″,””).length();

  • 采用递归,对十进制数用2取余

  • 树懒   03/18

    java integer中有个bitcount方法