【九度OJ】题目1197:奇偶校验 解题报告
【九度OJ】题目1197:奇偶校验 解题报告
标签(空格分隔): 九度OJ
http://ac.jobdu.com/problem.php?pid=1197
题目描述:
输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如’3’,输出:10110011)。
输入:
输入包括一个字符串,字符串长度不超过100。
输出:
可能有多组测试数据,对于每组数据,
对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。
样例输入:
3
3a
样例输出:
10110011
10110011
01100001
Ways
状态不好的时候就是老出错。首先明白题意,对字符的ASCii进行奇校验。首先转成对应的二进制,然后判断1的个数,如果是奇数把首位字符改成0即可。
这个可以使用BigInteger类直接转成二进制再处理。但我用C++解决的。
这几个地方出错了:
1.int answer[10];memset(answer, 0, sizeof(answer));
应该放到循环体里。
2.temp别忘了处理,p别忘了++
3.判断一个数字的尾数可以直接&1
#include<stdio.h>
#include<string.h>
int main() {
char a[110];
while(gets(a)!=NULL) {
int len = strlen(a);
for (int i = 0; i < len; i++) {
int answer[10];
memset(answer, 0, sizeof(answer));
int temp = a[i];
int p = 0;
int count = 0;
while (temp) {
answer[p++] = temp & 1;
if ((temp & 1) == 1) {
count++;
}
temp /= 2;
}
if ((count & 1) == 1) {
answer[7] = 0;
} else {
answer[7] = 1;
}
for (int j = 7; j >= 0; j--) {
printf("%d", answer[j]);
}
printf("\n");
}
}
return 0;
}
Date
2017 年 3 月 19 日