【九度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 日