• 题目1197:奇偶校验


    题目描述:

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

    输入:

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

    输出:

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

    样例输入:
    3
    3a
    样例输出:
    10110011
    10110011
    01100001
    解题思路
            刚开始奇偶校验不知道是什么意思,下面简单说一下。
            信息是以比特流的方式传输的,类似01000001。在传输过程中,有可能会发生错误,比如,我们存储了01000001,但是取出来却是01000000,即低位由0变成了1。为了检测到这种错误,我们可以通过“奇偶校验”来实现。假如,我们存储的数据是一个字节,8个比特位,那我们就可以计算每个字节比特位是1的个数,如果是偶数个1,那么,我们就把第九个位设为1,如果是奇数个1,那么就把第九个位设为0,这样连续9个字节比特位为1的位数肯定是奇数。这中方法叫做“奇校验”,“偶校验”和此类似。当然,在实际应用中,也可以把一个字节的前7位作为数据位,最后一个为作为校验位。
    比如说对字符‘3’进行奇偶校验。'3'的ascii值为51,51对应二进制为  0110011(用七位表示)  其中1的个数为4(偶数)个。所以在最高为添1 所以'3'的奇校验为10110011
    另外注意一下十进制转二进制 循环的写法      有些博客上是用位操作 &来做的   比如 http://blog.csdn.net/wconvey/article/details/8510943
    刚开始总是WA  找了很久发现  原来是数组开小了 我开的100  这样的话会溢出   所以直接报错   改成105就好了
    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    using namespace std;
    int judge[9];
    int sum;
    void toBinary(char c){//字符c ascii值 十进制转 二进制函数
    	sum=0;
    	int x;
    	for(int i=0;i<8;i++) judge[i]=0;
    	x=c;
    //	cout<<x<<endl;
    	int i=7;
    	int newx;
    	do{
    		newx=x/2;
    		int t=x%2;
    		judge[i--]=t;
    		if(t==1) sum++;
    		x=newx;
    	}while(newx!=0);
    	
    }
    int main(){
    
    	char a[105];
    	while(cin.getline(a,105)){
    		for(int i=0;i<strlen(a);i++){
    			char ch=a[i];
    			if(ch=='') break;
    			//ch是当前字符
    			toBinary(ch);
    		//	cout<<"sum="<<sum<<endl;
    			if(sum%2==1) judge[0]=0;
    			else judge[0]=1;
    			for(int i=0;i<8;i++) printf("%d",judge[i]);
    			printf("
    ");
    		}
    	}
    } 
    

      

  • 相关阅读:
    数据结构(二)之链表
    数据结构(一)之数组,栈,队列
    记第一次学习Mybatis
    多线程基本实现方法(一)
    TCP三次握手及四次四次释放协议解析
    《绝不划水队》第一次作业:项目选题
    第一次博客作业
    vim cheatsheet
    js cheatsheet
    js re cheatsheet
  • 原文地址:https://www.cnblogs.com/Elaine-DWL/p/6813037.html
Copyright © 2020-2023  润新知