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

来源:互联网 发布:网龙网络校招 编辑:程序博客网 时间:2024/06/18 17:01

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

标签(空格分隔): 九度OJ


http://ac.jobdu.com/problem.php?pid=1197

题目描述:

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

输入:

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

输出:

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

样例输入:

33a

样例输出:

101100111011001101100001

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 日

0 0