HUST-奇偶校验

题目描述

输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3’,输出:10110011)。

输入描述:

输入包括一个字符串,字符串长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据,
对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。
示例1

输入

复制
3
3a

输出

复制
10110011
10110011
01100001

这一题里面将数字和字母统一看成是char类型的,所以数字3实际存储时为ASCII码中的‘3’,其十进制表示是51,转化为二进制表示就是0110011,取最高位为奇校验位,校验位为1,
所以校验后的二进制数为10110011,字母同理。故本题只需将输入的字符减去‘\0’得到字符的十进制表示,再将其转化为七位二进制数加上一位校验位输出即可。
解法一:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main()
{
    string line;
    while(getline(cin,line))
    {
        int len=line.length();
        for(int i=0;i<len;i++)
        {
            int j=0;
            int arr[9]={0};
            int num=(int)(line[i]);
            int count=0;
            while(num>0){
                int value=num%2;
                arr[j++]=value;
                if(value==1) count++;
                num=num/2;
            }
            if(count%2==0) arr[7]=1; 
            for(j=7;j>=0;j--) cout<<arr[j];
            cout<<endl;
        }
    }
    return 0;
}

解法二:(使用bitset

#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <bitset>
using namespace std;
int main()
{
    string str;
    while(cin>>str)
    {
        for(auto c:str)
        {
            bitset<8> bit(c);
            if(bit.count()%2==0) bit[7]=1;
            cout<<bit<<endl;
        }
    }
    return 0;
}

 

posted @ 2021-02-04 19:01  yyer  阅读(165)  评论(0编辑  收藏  举报