题目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==‘\0‘) 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("\n");
		}
	}
}

  

时间: 2024-11-09 00:31:22

题目1197:奇偶校验的相关文章

九度-题目1197:奇偶校验

题目描述: 输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3',输出:10110011). 输入: 输入包括一个字符串,字符串长度不超过100. 输出: 可能有多组测试数据,对于每组数据,对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行. 样例输入: 3 3a 样例输出: 10110011 10110011 01100001 来源: 2010年华中科技大学计算机研究生机试真题 对字符的ASCii进行奇校验.首先转成对应的二进制,然后判断1

2010年华中科技:奇偶校验

题目描述: 输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3’,输出:10110011). 输入: 输入包括一个字符串,字符串长度不超过100. 输出: 可能有多组测试数据,对于每组数据,对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行. 样例输入: 3 3a 样例输出: 10110011 10110011 01100001 思路:将字母的ASCII码转化为对应的7位二进制数,若二进制数中1的个数为偶数,则校验位为1(形成奇数个1),若二

1197.奇偶检验

题目描述: 输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3',输出:10110011). 输入: 输入包括一个字符串,字符串长度不超过100. 输出: 可能有多组测试数据,对于每组数据, 对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行. 样例输入: 3 3a 样例输出: 10110011 10110011 01100001 # include<stdio.h> # include<string.h> char s[100

华中科技大学_2010___考研计算机_复试上机

1,奇偶校验 题目描写叙述: 输入一个字符串,然后对每一个字符进行奇校验,最后输出校验后的二进制数(如'3',输出:10110011). 输入: 输入包含一个字符串,字符串长度不超过100. 输出: 可能有多组測试数据,对于每组数据, 对于字符串中的每个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行. 例子输入: 3 3a 例子输出: 10110011 10110011 01100001 总结:感觉还好,可是以下再贴出一份代码,网上找的,感觉很有意思,直接使用异或运算即可. #in

HDU 题目分类

基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092.1093.1094.1095.1096.1097.1098.1106.1108.1157.1163.1164.1170.1194.1196.1197.1201.1202.1205.1219.1234.1235.1236.1248.1

关于Linux运维的一些题目总结

一.有文件file1 1.查询file1里面空行的所在行号 awk ‘{if($0~/^$/)print NR}’ fileorgrep -n ^$ file |awk ‘BEGIN{FS=”:”}{print $1}’ 2.查询file1以abc结尾的行grep abc$ file1 3.打印出file1文件第1到第3行sed -n ’1,3p’ file1head -3 file1 二.如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.2.1 -A PREROUTIN

杭电ACM题目分类

杭电ACM题目分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028. 1029.1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092. 1093.1094.1095.1096.1097.1098.1106.1108.1157.1163.1164.1170.1194.1196. 1197.1201.1202.1205.1219.1234.123

Linux面试题目(一)

第一次发帖,整理了一下Linux题目,答案不是标准的,欢迎讨论,进入各自理想的公司! 1.简述Apache两种工作模式,以及它们之间的区别.答:(1)prefork MPM使用多个子进程,每个子进程只有一个线程来处理一个http请求,直到这个TCP连接被释放.root主进程在最初建立startserver个子进程后,等待1秒钟,创建2个进程,再等待1秒钟,再创建4个进程,直到满足最小空闲进程的数量,这就是预派生的由来.这种模式可以不必在请求到来时再产生新的进程,从而提高了访问效率. (2)wor

Light oj 1197 - Help Hanzo (素数筛技巧)

题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 给你a和b求a到b之间的素数个数. 先在小区间素数筛,大区间就用类似素数筛的想法,把a到b之间不是素数的标记出来.因为b-a最多1e5的大小,所以每组数据的时间复杂度最多就o(1e5 log1e5). 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using names