zoukankan      html  css  js  c++  java
  • 二进制中1的个数

    题目描写叙述:

    输入一个整数。输出该数二进制表示中1的个数。

    当中负数用补码表示。

    输入:

    输入可能包括多个測试例子。
    对于每一个输入文件,第一行输入一个整数T,代表測试例子的数量。对于每一个測试例子输入为一个整数。


    。n保证是int范围内的一个整数。

    输出:

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

    例子输入:
    3
    4
    5
    -1
    例子输出:
    1
    2
    

    32

    /*
    二进制中1的个数
    by Rowandjj
    2014/7/24
    */
    #include<stdio.h>
    #include<stdlib.h>
    //解法1
    int func1(int n)
    {
    	unsigned int flag = 1;
    	int count = 0;
    	while(flag)//须要循环32次
    	{//从低到高依次推断该位是否为1
    		if(n & flag)
    		{
    			count++;
    		}
    		
    		flag = flag << 1;
    	}
    	return count;
    }
    //解法2----->很巧妙的办法
    int func2(int n)
    {
    	int count = 0;
    	while(n)
    	{
    		count++;
    		n = (n-1)&n;//通过此操作能够去掉二进制n最后的一个1
    	}
    	return count;
    }
    int main()
    {
    	int n,m,i;
    	while(scanf("%d",&n) != EOF)
    	{
    		for(i = 0; i < n; i++)
    		{
    			scanf("%d",&m);
    			printf("%d
    ",func2(m));
    		}
    	}
    	return 0;
    }







  • 相关阅读:
    洛谷P1613 跑路
    洛谷P2149 Elaxia的路线
    洛谷P3119 草鉴定
    洛谷P1972 HH的项链
    洛谷P2458 保安站岗
    uva10061
    uva579
    uva 127 "Accordian" Patience
    uva10177 (2/3/4)-D Sqr/Rects/Cubes/Boxes?
    uva156
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6775712.html
Copyright © 2011-2022 走看看