本文主要是介绍1417: 为了未来的计算机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
未来是超导计算机、纳米计算机、光计算机、DNA计算机和量子计算机的天下。但是基于集成电路的计算机短期内还不会退出历史的舞台。
2000年,上海大学金翊教授从构造计算机的基本原则和光的基本特性出发,首次将光强度与偏振方向结合起来表示三值信息,利用液晶的旋光效应和偏振器来实现三种光学状态的相互转换和迁移,提出了一种全新的光计算机理论——三值光学计算机(Ternary Optical Computer,简称TOC)。
三值光学计算机用两个正交的偏振态和无光态表示信息,所以,它的一个数据位上有三个取值,除0和1之外,还可以再取一个值。而普通的集成电路计算机的数据位上只有两个值0,1。
已知普通计算机上的数据位只有两个值0和1。所以任何数据都可以用0和1表示。你的目标是求出已知数据的二进制表示中1的个数。并对其进行统计。
输入
多组测试数据,每组测试数据各占两行。
第一行一个整数N,表示接下来的下一行包含多少个整数。
第二行包含N个整数。
(所有的输入都以十进制表示,1<N<=1000,整数范围[-2^31,2^31-1])
请读到文件末尾。
输出
根据每组测试数据,请统计出N个整数的二进制表示中1的个数。
样例输入
5
1 2 3 4 5
3
2 1 0
1
-1
样例输出
Case #1: 7
Case #2: 2
Case #3: 32
#include<stdio.h>
int fan(long int n)
{
n = (n&0x55555555) + ((n>>1)&0x55555555);
n = (n&0x33333333) + ((n>>2)&0x33333333);
n = (n&0x0f0f0f0f) + ((n>>4)&0x0f0f0f0f);
n = (n&0x00ff00ff) + ((n>>8)&0x00ff00ff);
n = (n&0x0000ffff) + ((n>>16)&0x0000ffff);
return n;
}
int main() {
int n,i,s,t=1;
long int a;
while(scanf("%d",&n)!=EOF)
{
s=0;
for(i=0; i<n; i++)
{
scanf("%ld",&a);
s+=fan(a);
}
printf("Case #%d: %d\n",t++,s);
}
return 0;
}
这篇关于1417: 为了未来的计算机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!