九度-题目1197:奇偶校验
- 题目描述:
-
输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3’,输出:10110011)。
- 输入:
-
输入包括一个字符串,字符串长度不超过100。
- 输出:
-
可能有多组测试数据,对于每组数据,
对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。
- 样例输入:
-
3 3a
- 样例输出:
-
10110011 10110011 01100001
- 来源:
- 2010年华中科技大学计算机研究生机试真题
- 对字符的ASCii进行奇校验。首先转成对应的二进制,然后判断1的个数,如果1的个数是偶数把首位字符改成0。
- ASCii长度是8位。
判断奇偶,可以用&1,也可以用%2。前者效率高。
1 #include <stdio.h> 2 #include <string.h> 3 4 using namespace std; 5 6 char str[101]; 7 8 9 10 int main() 11 { 12 while(scanf("%s", str)!=EOF) 13 { 14 int len=strlen(str); 15 for(int i=0; i<len; i++) 16 { 17 int tmp=str[i]; //tmp保存的是ascii码 18 char bin[10]; 19 memset(bin, 0, sizeof(bin)); 20 int x=0; 21 22 do{ 23 int t=tmp%2; 24 bin[x++]=t+'0'; 25 tmp/=2; 26 }while(tmp); 27 28 29 int cnt=0; 30 31 for(int j=0; j<8; j++) 32 { 33 34 if(bin[j]!='1' && bin[j]!='0') 35 { 36 bin[j]='0'; 37 } 38 else if(bin[j]=='1') 39 cnt++; 40 } 41 42 43 if(cnt%2==0) 44 {//偶数 45 bin[7]='1'; 46 } 47 48 for(int j=7; j>=0; j--) 49 printf("%c", bin[j]); 50 51 printf("\n"); 52 } 53 } 54 55 return 0; 56 }