今天的计算机课上,老师给同学们出了一道题:
输入n个数,请将其中的偶数的二进制反转。
eg:输入1 6 5
其中6是偶数,二进制表示为110,反转后为011,代表3,所以最终输出1 3 5.
小贱君最近脑子不怎么好使,想了半天也没想出来如何做,最后他向你寻求帮助了,帮帮可怜的小贱君吧!
输入描述:
输入包含多组测试数据。
对于每组测试数据:
N --- 输入的数字个数
N个数:a0,a1,...,an-1
保证:
1<=N<=3000,0<=ai<=INT_MAX.
输出描述:
对于每组数据,输出N个整数。
#include<iostream> #include<algorithm> using namespace std; const int N = 3000; int a[N], bit[N]; int count(int n)//统计n转换成2进制的位数,和二进制存在bit中 { int cnt = 0; while (n) { //cout << n % 2 << endl; bit[cnt] = n % 2; n = n /2; cnt++; } return cnt; ; } int main() { int n; while (scanf("%d", &n) > 0) { for (int i = 0; i < n; i++) { scanf("%d", &a[i]); if (a[i] % 2 == 0) { int cn = count(a[i]); int sum = 0; for (int j = cn - 1; j >= 0; j--) sum += pow(2, cn - j - 1)*bit[j];//二进制转十进制 a[i] = sum; } } for (int i = 0; i < n; i++) { cout << a[i]; if(i!=n-1) cout<<" "; } cout << endl; } }