zoukankan      html  css  js  c++  java
  • 剑指OFFER之二进制中1的个数(九度OJ1513)

    题目描述:

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

     

    输入:

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

     

    输出:

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

     

    样例输入:

    3
    4
    5
    -1

    样例输出:

    1
    2
    32

    解题思路:

      首先对一个数判断1的个数,可以考虑直接遍历每一位就行了,那么实现起来,可以只看最后一位(与1进行与操作),再进行右移1位。或者只看最高位操作方法类似。

    代码:

    #include <stdio.h>
    int getNumber(int test);
    int main(){
        int n,i,test;
        while(scanf("%d",&n)!=EOF && n > 0){
            for(i=0 ; i<n ; i++){
                scanf("%d",&test);
                printf("%d
    ",getNumber(test));
            }
        }
        return 0;
    }
    int getNumber(int test){
        int sum = 0,i;
        for(i=0;i<32;i++){
            sum+= (test&1);
            test = test>>1;
        }
        return sum;
    }
    /**************************************************************
        Problem: 1513
        User: xhalo
        Language: C
        Result: Accepted
        Time:80 ms
        Memory:912 kb
  • 相关阅读:
    HTTP——学习笔记(3)
    HTTP——状态码
    HTTP——学习笔记(2)
    HTTP——学习笔记(1)
    Sqlserver 存储过程
    Sqlserver 函数(例子)
    Sqlserver 函数
    sqlserver字段类型
    redis入门笔记(2)
    redis入门笔记(1)
  • 原文地址:https://www.cnblogs.com/xing901022/p/3746266.html
Copyright © 2011-2022 走看看