谁没有关灯?
时间: 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
