题目描述
输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3’,输出:10110011)。
输入描述:
输入包括一个字符串,字符串长度不超过100。
输出描述:
可能有多组测试数据,对于每组数据, 对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。
示例1
输出
复制10110011 10110011 01100001
这一题里面将数字和字母统一看成是char类型的,所以数字3实际存储时为ASCII码中的‘3’,其十进制表示是51,转化为二进制表示就是0110011,取最高位为奇校验位,校验位为1,
所以校验后的二进制数为10110011,字母同理。故本题只需将输入的字符减去‘ ’得到字符的十进制表示,再将其转化为七位二进制数加上一位校验位输出即可。
解法一:
#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; }