zoukankan      html  css  js  c++  java
  • 九度oj 题目1513:二进制中1的个数

    题目描述:

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

    输入:

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

    输出:

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

    样例输入:
    3
    4
    5
    -1
    样例输出:
    1
    2
    32

    一开始提交居然没对,后来发现居然把输入形式搞错了,不开心
     1 #include <cstdio>
     2 int m,n;
     3 
     4 int main(int argc, char const *argv[])
     5 {
     6     while(scanf("%d",&n) != EOF) {
     7         while(n--) {
     8             scanf("%d",&m);
     9             int ans = 0;
    10             unsigned p = (unsigned)m;
    11             while(p != 0) {
    12                 ans = ans + (p & 1);
    13                 p = p >> 1;
    14             }
    15             printf("%d
    ",ans);
    16         }
    17         
    18     }
    19     return 0;
    20 }
    21     

     注意如果是-1直接右移的话,前面补的是1而不是0

  • 相关阅读:
    docker 常用
    vue-cli 的静态资源
    ubuntu 恢复模式
    virtualbox
    cmake 使用技巧
    VLC播放pcm
    Ice-Lite 理解
    webrtc ice流程
    Mediasoup_Demo信令过程, client and server
    Mediasoup
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5812506.html
Copyright © 2011-2022 走看看