AcWing 3599. 奇偶校验
原题链接
简单
作者:
LiHaoyu
,
2023-02-07 14:13:57
,
所有人可见
,
阅读 146
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string base(int num, int b) //将某个数转化为b进制的数
{
string res;
while (num)
{
res += (num % b + '0');
num /= b;
}
reverse(res.begin(), res.end());
return res;
}
int lowbit(int x)
{
return x & -x;
}
int get(int num) //计算某二进制数中有多少位一
{
int cnt = 0;
int t = num;
while (t)
{
t -= lowbit(t);
cnt ++ ;
}
return cnt;
}
void operate(int cnt, string s)
{
int n = s.size();
if (n < 7) //最高位补0
{
reverse(s.begin(), s.end());
s += '0';
reverse(s.begin(), s.end());
}
if (cnt % 2 == 0) //最高位加一位1
{
reverse(s.begin(), s.end());
s += '1';
reverse(s.begin(), s.end());
}
else //最高位加一位0
{
reverse(s.begin(), s.end());
s += '0';
reverse(s.begin(), s.end());
}
cout << s << endl;
}
int main()
{
string s;
while (cin >> s)
{
for (int i = 0; i < s.size(); i ++ )
{
char c = s[i];
int num = (int)(c);
int cnt = get(num);
string s = base(num, 2);
operate(cnt, s);
}
}
return 0;
}