2017-08-28 10:55:17
writer:pprp
在之前写了一个关于bitset用法的贴之后,这是第一次运用,不得不说如果不用的话还是一头雾水
以后写代码要标记开始时间,和结束时间了,我认为这是一个好习惯
这次写这个简单的代码也提醒我,应该写一部分就调试一部分,而且一般别用debug,
正式acm的时候用debug很慢,所以如果要调试的话就应该用cout对结果进行输出
题意如下:
题目描述
编写一个函数,其功能是将一个二进制整数的奇数位反转(0变1,1变0)。
输入
输入一个20位以内的二进制数,
输出
输出变换后的二进制数。(注意:二进制数前面如果有0要去掉)
/*
@theme:二进制变换
@writer:pprp
@declare:
@start:10:36
@end:10:55
@date:2017/8/28
*/
#include <bits/stdc++.h>
#include <bitset>
using namespace std;
int main()
{
int a;
cin >> a;
bitset<20>bs(a);
// test
// for(int i = 0 ; i < 20 ; i++)
// cout << bs[i];
// cout << endl;
int store[20];
memset(store, -1, sizeof(store));
bool flag_begin = 0;
for(int i = 19 ; i >= 0 ; i--)
{
if(!flag_begin && bs[i] == 0)
{
continue;
}
if(bs[i] == 1)
{
store[i] = 1;
flag_begin = 1;
}
else
store[i] = 0;
}
// for(int i = 0 ; i < 20 ; i++)
// cout << store[i];
// cout << endl;
for(int i = 0 ; i < 20 ; i++)
{
if(store[i] == -1)
break;
if((i+1)%2 == 1)
{
if(store[i] == 0)
store[i] = 1;
else
store[i] = 0;
}
}
for(int i= 0 ; i < 20 ; i++)
{
if(store[i] == -1)
break;
cout << store[i];
}
cout << endl;
return 0;
}