zoukankan      html  css  js  c++  java
  • 奇偶校验

    华科的题很有深度啊,没有一点基础知识的话估计这个都是做不出来的吧。。

    首先说一下什么是奇偶校验:

    它是一种校验代码传输正确性的方法。

    按照被传输的一组二进制代码数位中“1”的个数为奇数或者偶数来进行校验。

    CPU读取存储的数据时,会把前八位存储的数据相加,看计算结果是否与校验位一致。一般校验位为最高位。

    题目描述:对输入的一组字符串每一个字符进奇校验,最高位为校验位。输出结果并换行。

    解题思路:

    本质可以理解为一个简单的字符串处理问题,对于每一个字符串逐位处理字符。对于输入的字母视为ascii码,(最大127)所以只要str[1...7]保存原有数据即可

    通过膜二的方式计算出二进制形式,最高位保留校验位,通过计算str[1..7]中1的个数修改str[0]中存放的数字,使得最后str[0..7]中存储的1的个数为奇数。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define N 200
     4 void print(char c)
     5 {
     6     int str[8];//str[0]为校验位
     7     int i=7;
     8     int count=0;
     9     while(c>0)
    10     {
    11         str[i]=c%2;
    12         c=c/2;
    13         i--;//倒着存,因为输出的时候高位在后面
    14     }
    15     while(i>=1)
    16     {
    17         str[i]=0;
    18         i--;
    19     }
    20     for(i=1; i<8; i++)
    21     {
    22         if(str[i]==1)count++;//统计1的位数
    23     }
    24     if(count%2==0)str[0]=1;//若1的个数为偶数,最高位置1,否则置0
    25     else str[0]=0;
    26     for(i=0; i<8; i++)printf("%d",str[i]);
    27     printf("
    ");
    28 }
    29 int main()
    30 {
    31     char str0[100];
    32     int len,i;
    33     while(gets(str0))
    34     {
    35         len=strlen(str0);
    36         for(i=0; i<len; i++)
    37             print(str0[i]);
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    计算机重要算法
    文明能压碎,情怀不衰,无论枯干山水
    【首先膜拜大湿】poj-2386-Lake Counting-DFS模板题
    图论待做题
    HUD-1142
    课后作业第二篇
    课后作业第一篇
    linux安装tomcat(转载:http://blog.csdn.net/zhuihunmiling/article/details/8977387)
    log4j 日志的初始化
    用Wget进行下载
  • 原文地址:https://www.cnblogs.com/AKsnoopy/p/8419521.html
Copyright © 2011-2022 走看看