描述
输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如’3’,输出:10110011)。 输入描述:
输入包括一个字符串,字符串长度不超过100。 输出描述: 可能有多组测试数据,对于每组数据,
对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。
示例1
输入:
3
3a
输出:
10110011
10110011
01100001
解题思路:
这个题目的意思实际上是给一个字符,然后对其ascii码的二进制进行校验,如果二进制中1为偶数,则在最高位添1,否则添0
解题步骤:
先用int型将字符转化为数字,然后求其二进制的形式(注意:这里二进制不足7位时要补齐7位,最高位为0), 然后计算其中1的个数,不是奇数个则在最高位补1.
#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
string change_to_bit(int num)
{
string res = "";
while(num != 0)
{
int re = num/2;//商
int yu = num%2;//余
res += (yu+'0');
num = re;
}
if(res.size() < 7)
res += '0';
return res;//最后得到的字符串与实际上的二进制相反
}
void check(char c)
{
int ascii = c;
string res = change_to_bit(ascii);
int cnt = 0;
for(auto i:res)
{
if(i == '1')
cnt++;
}
if(cnt%2 == 0)
res += '1';
else
res += '0';
reverse(res.begin(), res.end());
printf("%s\n", res.c_str());
return;
}
int main()
{
string s;
while(cin >> s)
{
for(int i = 0; i < s.length(); i++)
check(s[i]);
}
}