标签:位操作
输入n个数,请将其中的偶数的二进制反转。
eg:输入1 6 5
其中6是偶数,二进制表示为110,反转后为011,代表3,所以最终输出1 3 5.
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include<assert.h> void Reverse(int *&array, int index,int size) { assert(array); assert(index < size); assert(array[index] % 2 == 0); int data = array[index]; int right = 0; int left = 31; while (left >= 0) { int singal = (array[index] >> left) & 1; if (singal == 1) { break; } left--; } while (left > right) { int left1 = (data>>left) & 1; int right1 = (data>>right) & 1; if (left1==1) array[index] = array[index] |(1<< right); else array[index] = array[index] & (~(1<< right)); if (right1 == 1) array[index] = array[index] | (1 << left); else array[index] = array[index] & (~(1 << left)); left--; right++; } } void change(int *&array, int size) { assert(array); for (int i = 0; i < size; i++) { if (array[i] % 2 == 0) Reverse(array, i, size); } } int main() { int size = 0; cin >> size; int *array = new int[size]; for (int i = 0; i < size; i++) { cin >> array[i]; } change(array, size); for (int i = 0; i < size; i++) { cout << array[i] << " "; } cout << endl; system("pause"); return 0; }
本文出自 “学习记录” 博客,转载请与作者联系!
标签:位操作
原文地址:http://10794428.blog.51cto.com/10784428/1795452