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

  • 相关阅读:
    java类型比较_Java数据类型的比较
    学习方法-1:海绵学习法
    性能测试:TPS和QPS的区别
    代码反思
    网站TLS升级 1.0&1.1--1.2
    Mysql常用语法
    初级测试工程师面试指南
    postman实战之断言
    postman预处理脚本实战
    什么是HTTP超文本协议
  • 原文地址:https://www.cnblogs.com/huoyao/p/4248910.html
Copyright © 2011-2022 走看看