812 水题~~【进制转化】

来源:互联网 发布:刘建明 知乎 编辑:程序博客网 时间:2024/06/18 14:46

水题~~

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述

输入一组正整数,每个正整数取值为【1,255】,你们懂得,刚好用8位二进制位可以表示。。。

你要做的就是:对于每个输入的正整数,如果她的二进制位有偶数个1,则该数满足要求,把符合要求的正整数的二进制位相加,并用二进制表示法输出。你知道规律吗?

输入
有多组测试数据。
每组测试数据第一行输入N,表示有N个正整数,N<=255
第二行输入N个正整数,每个正整数取值为[1~255]
输出
输出所有满足要求的正整数的二进制表示法的和
样例输入
51 2 3 4 571 2 3 4 5 6 721 2
样例输出
100011100
提示
样例1:3的二进制为00000011,5的二进制为00000101,符合条件,故相加即得1110(忽略前面的零)。


如题所言,水题...判断每个数的二进制位是奇数还是偶数,直接循环统计就可以,对二进制的转化比较熟悉很轻松就能解决,统计出结果之后,转化为二进制的形式输出就可以了...



#include<stdio.h>int n,x[305],sum;int judge(int t)//判断是否符合偶数个 1 {int cnt=0;while(t){if(t&1){++cnt;}t/=2;}if(cnt&1){return 0;}return 1;}void slove(){int cnt=0;while(sum){x[cnt++]=(sum%2);//转化为二进制sum/=2;}for(int i=cnt-1;i>0;--i)//输出二进制表示{printf("%d",x[i]);}printf("%d\n",x[0]);}int main(){while(~scanf("%d",&n)){sum=0;for(int i=0;i<n;++i){int a;scanf("%d",&a);if(judge(a))//判断{sum+=a;//累加和}}slove();}return 0;} 





0 0
原创粉丝点击