812 水题~~【进制转化】

水题~~

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

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

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

输入
有多组测试数据。
每组测试数据第一行输入N,表示有N个正整数,N<=255
第二行输入N个正整数,每个正整数取值为[1~255]
输出
输出所有满足要求的正整数的二进制表示法的和
样例输入
5
1 2 3 4 5
7
1 2 3 4 5 6 7
2
1 2
样例输出
1000
1110
0
提示
样例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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值