您的位置:首页 > 其它

【九度OJ】题目1197:奇偶校验 解题报告

2017-03-19 18:29 281 查看

【九度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 日
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: