水题~~
时间限制:
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>
#include <iostream>
#include <string.h>
#include <math.h>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
int a[10];
int text(int n){
int num=0;
int x=n;
while(n){
if(n%2==1)
num++;
n=n/2;
}
if(num%2==0){
return x; //10进制
}
else
return 0;
}
int main(){
int n,sum;
int k;
while(~scanf("%d",&n)){
sum=0;
k=0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(text(a[i])){
sum+=text(a[i]);
}
}
if(sum==0){
printf("0\n");
}
else{
while(sum){
a[k++]=sum%2;
sum=sum/2;
}
for(int i=k-1;i>=0;i--){
printf("%d",a[i]);
}
printf("\n");
}
}
return 0;
}