谁没有关灯?

谁没有关灯?

时间: 1ms        内存:128M

描述:

光明大厦的管理者发现员工下班后经常不关灯,造成极大的浪费。为了节约用电,大厦引进了一个叫做TLS的新仪器,该仪器能够准确显示每个楼层各个房间灯的开关状态。TLS的液晶显示屏宽度有限,所以TLS显示屏只用来显示十进制数,不显示二进制数。
例如:大厦的某一层有4个房间。第 1、4 房间亮灯,第 2、3 房间灯没有开。则用二进制表示为1001,但是在TLS液晶显示屏为 9。现在你能帮助大厦管理者设计一个程序,使得他看见TLS显示屏上的数字,就能够判定出哪些房间没有关灯吗?并且计算出亮灯的总数吗?
给定一个十进制整数N,求其对应二进制数中1的个数

输入:

第一个整数表示有N组测试数据,其后N行是对应的测试数据,每行为一个整数,表示TLS显示的十进制数。

输出:

N行,每行输出对应一个输入,表示实际亮灯的个数。

示例输入:

4
2
100
1000
66

示例输出:

1
3
6
2

提示:

参考答案(内存最优[748]):

#include <stdio.h>

int BitCount(int n)
{
    int c = 0 ; // 计数器
    while (n > 0)
    {
        if((n & 1) == 1) // 当前位是1
            ++c ; // 计数器加1
        n >>= 1 ; // 移位
    }
    return c ;
}

int main()
{
	int cases,i,n,cnt;
	scanf("%d",&cases);
	for(i=0;i<cases;i++)
	{
		scanf("%d",&n);
		printf("%d\n",BitCount(n));

	}

 return 0;
}

参考答案(时间最优[0]):

#include <stdio.h>

int BitCount(int n)
{
    int c = 0 ; // 计数器
    while (n > 0)
    {
        if((n & 1) == 1) // 当前位是1
            ++c ; // 计数器加1
        n >>= 1 ; // 移位
    }
    return c ;
}

int main()
{
	int cases,i,n,cnt;
	scanf("%d",&cases);
	for(i=0;i<cases;i++)
	{
		scanf("%d",&n);
		printf("%d\n",BitCount(n));

	}

 return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞