标签:位操作
输入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