zoukankan      html  css  js  c++  java
  • 【剑指Offer面试编程题】题目1513:二进制中1的个数--九度OJ

    题目描述:

    输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

    输入:

    输入可能包含多个测试样例。
    对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。
    。n保证是int范围内的一个整数。

    输出:

    对应每个测试案例,
    输出一个整数,代表输入的那个数中1的个数。

    样例输入:

    3
    4
    5
    -1

    样例输出:

    1
    2
    32

    【解题思路】既然是二进制表示,我们只能从二进制入手,而二进制与位操作是紧密相关的,所以顺水推舟,很容易想多用位操作来实现。既然要统计1的个数,我们可以用一个只有一个1的二进制表示的数与目标数相与,从而就能得到该数1位置对应的目标数二进制位置是否为1,相与的结果为0则给位为0,否则为1。然后依次将数中1位置右移,并与目标数的二进制进行相与即可。

    AC code:

    #include <stdio.h>
    int main()
    {
      int n;
      while(scanf("%d",&n)!=EOF)
      {
        for(int i=0;i<n;++i)
        {
          int tt;
          scanf("%d",&tt);
          int cnt=0,t=1,idx=0;
          while(idx<32)
          {
            if(tt>=0 && t>tt)
              break;
            if(tt&t)
              ++cnt;
            t<<=1;
            ++idx;
          }
          printf("%d
    ",cnt);
        }
      }
      return 0;
    }
    /**************************************************************
        Problem: 1513
        User: huo_yao
        Language: C
        Result: Accepted
        Time:80 ms
        Memory:912 kb
    ****************************************************************/
    
    题目链接:http://ac.jobdu.com/problem.php?pid=1513

  • 相关阅读:
    洛谷 P2486 [SDOI2011]染色 树链剖分
    js 随机打乱数组
    js 中concat()和slice()方法介绍
    encodeURIComponent() 函数的使用
    mysql中LOCATE和CASE WHEN...THEN...ELSE...END结合用法
    Java多态的理解
    JQuery UI完成自动匹配的的下拉列表步骤
    marquee 标签的使用介绍
    orcale数据恢复
    sql中replace的用法
  • 原文地址:https://www.cnblogs.com/huoyao/p/4248910.html
Copyright © 2011-2022 走看看