奇偶校验

想直接看代码的点击此处!

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

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

输出描述:

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

输入:

3
3a

输出:

10110011
10110011
01100001

题目解析:
  我们可以知道在网络数据的传输中可能会出现很多的问题,为了防止我们接收到错误的数据进行一些错误的操作,在接收到数据时,我们往往会有一系列的校验工作,而“奇偶校验”就是最简单的错误检测码。
  奇偶校验有两种类型:奇校验、偶校验。
如果一组给定数据位中 1 的个数是奇数,那么偶校验位就置为 1,从而使得总的 1 的个数是偶数;
在这里我们将以奇校验为例,偶校验类比于奇校验。
奇校验: 如果给定一组数据位中 1 的个数是偶数,那么奇校验位就置为 1,使得总的 1 的个数保持奇数不变。
举例解释:

数据(1的个数)奇校验
0000 0011(2)0000 0011 1
0000 0100(1)0000 0100 0
0111 1111(7)0111 1111 0

 因为是奇校验,所以当二进制数中1的个数为偶数个时,需要添加1来将二进制中1的个数补为奇数个;当二进制数中1的个数为奇数个时,就不需要做任何操作。
 在我们知道了奇校验之后,我们不知道应该把校验位加在哪里,这就需要我们审题目了。本道题中时对于每个字符进行操作,我们会通过举例发现

  • 3的奇校验输出为10110011

  • a的奇校验输出为01100001

  • 字符3的ASCII码的十进制为:51,转化为二进制数0011 0011

  • 字符a的ASCII码的十进制为:97,转化为的二进制数0110 0001

 ASCII码使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号。
 总结来看,该处的字符按照ACSII码对应的十进制数转化为二进制进行奇校验,最高位奇校验校验位。

代码
/*
1. 将输入的字符串转化为字符数组。对字符数组中的每一个字符进行校验。
2. 对于每个字符的校验
	a. 取得其二进制序列
	b. 计算其二进制中1的个数
	c. 1的个数为奇数个,高位设置为0;1的个数为偶数个,高位设置为1
*/
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String str = sc.next();
            jiCheck(str.toCharArray());
        }
    }
    public static void jiCheck(char[] arrs){
        int[] result = new int[8];    // 保存二进制序列
        for(int i = 0; i < arrs.length; i++){
            int one = 0x01;
            int count = 0;    // 保留二进制序列中1的个数
            // 得到其二进制序列
            int index = 7;
            while(index > 0){
                result[index] = ((arrs[i]& one) == 0) ? 0 : 1;
                if(result[index] == 1)
                    count++;
                one <<= 1;
                index--;
            }
            // 偶数个1,高位为1;奇数个1,高位为0
            result[0] = (count % 2 == 1) ? 0 : 1;
            // 输出
            for(int k = 0; k < 8; k++){
                System.out.print(result[k]);
            }
            System.out.println();
        }
    }
}

本地IDEA里运行:
在这里插入图片描述
牛客网上在线OJ:
在这里插入图片描述

  • 13
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值