1 /*水题~~
 2 时间限制:1000 ms  |  内存限制:65535 KB
 3 难度:1
 4 描述
 5 输入一组正整数,每个正整数取值为【1,255】,你们懂得,刚好用8位二进制位可以表示。。。
 6 你要做的就是:对于每个输入的正整数,如果她的二进制位有偶数个1,则该数满足要求,把符合要求的正整数的二进制位相加,并用二进制表示法输出。
 7 你知道规律吗?
 8 输入
 9 有多组测试数据。
10 每组测试数据第一行输入N,表示有N个正整数,N<=255
11 第二行输入N个正整数,每个正整数取值为[1~255]
12 输出
13 输出所有满足要求的正整数的二进制表示法的和
14 样例输入
15 5
16 1 2 3 4 5
17 7
18 1 2 3 4 5 6 7
19 2
20 1 2
21 样例输出
22 1000
23 1110
24 0
25 提示
26 样例1:3的二进制为00000011,5的二进制为00000101,符合条件,故相加即得1110(忽略前面的零)。
27 上传者
28 TC_赵坤垚
29 */
30 #include<stdio.h>
31 int main()
32 {
33     int n, i, a[260], sum;
34     while( scanf("%d",&n)  != EOF)
35     {
36         int f(int x);
37         void g(int y);
38         sum=0;
39         for(i=0; i<n; i++)
40         scanf("%d",&a[i]);
41         for(i=0; i<n; i++)
42         if(f(a[i]))
43         sum+=a[i];
44         g(sum);
45     }
46     return 0;
47 }
48 int f(int x)
49 {
50     int i=0;
51     while(x)
52     {
53         if(x%2 == 1)
54         i++;
55         x/=2;
56     }
57     if(i%2==0)
58     return 1;
59     else
60     return 0;
61 }
62 void g(int y)
63 {
64     int  s[31],i,a;
65     for(i = 0; ; i++)
66          {
67                 s[i] = y%2;
68                 y /= 2;
69                 if(y == 0) break;
70          }
71          for(a = i;a >= 0;a--)
72                 printf("%d",s[a]);
73          printf("\n");
74 }