描述
输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3’,输出:10110011)。
输入描述:
输入包括一个字符串,字符串长度不超过100。
输出描述:
可能有多组测试数据,对于每组数据, 对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。
示例
输入
3
3a
输出
10110011
10110011
01100001
题解 1
思路
奇校验的要求是二进制串中要有奇数个 1 ,对于本题,首先将输入的字符化为对应的二进制串,然后统计其中的 1 的个数,根据统计结果决定是否将二进制串的最高位置 1 。
程序
#include <bits/stdc++.h>
#define MAX 10
using namespace std;
int res[MAX];
int d2b(int n) {
int i = 0;
memset(res, 0, sizeof(res));
while (n) {
res[i] = n % 2;
i++;
n /= 2;
}
int sum = 0;
for (int j = 0; j < 8; j++)
if (res[j] == 1)
sum++;
if (sum % 2 == 0)
return 1;
else
return 0;
}
int main() {
string s;
while (cin >> s) {
for (int i = 0; i < s.size(); i++) {
if (d2b((int)s[i]))
res[7] = 1;
for (int i = 7; i >= 0; i--)
cout << res[i];
cout << endl;
}
}
return 0;
}
题解 2
思路
利用 C++ 提供的 bitset 库进行解题。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
char s;
while (cin >> s) {
// 使用 bitset 类型,将字符 s 转换为 8 位的二进制表示。
bitset<8> bs(s);
// 计算二进制表示中 "1" 的个数。
auto c = bs.count();
// 如果 "1" 的个数为奇数,则在最高位添加一个 "1",否则添加 "0"。
bs[7] = (c % 2 != 1);
cout << bs << endl;
}
return 0;
}