华中科技大学_2010___考研计算机_复试上机
1,奇偶校验
- 题目描写叙述:
-
输入一个字符串,然后对每一个字符进行奇校验,最后输出校验后的二进制数(如'3’,输出:10110011)。
- 输入:
-
输入包含一个字符串,字符串长度不超过100。
- 输出:
-
可能有多组測试数据,对于每组数据,
对于字符串中的每个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。
- 例子输入:
-
3 3a
- 例子输出:
-
10110011 10110011 01100001
总结:感觉还好,可是以下再贴出一份代码,网上找的,感觉很有意思,直接使用异或运算即可。
#include<iostream> #include<string> using namespace std; void odd_verify(char a){ int num[8]={0,0,0,0,0,0,0,0}; int i=0,j=0; while(a){ if(a%2 == 1) j++; num[i++] = a%2; a=a>>1; } if(j%2 != 1){ num[7] = 1; } for(j=7;j>0;j--){ cout<<num[j]; } cout<<num[0]<<endl; } int main(){ string str; int i,len; while(cin>>str){ len=str.length(); for(i=0;i<len;i++){ odd_verify(str[i]); } } return 0; }
#include<stdio.h> #include<string.h> int main() { char str[110]; while(~scanf("%s",&str)) { for(int i=0;str[i];i++) { int num[8]; memset(num,0,sizeof(num));//注意memset所处的位置 int j=0; while(str[i]) { num[j++]=str[i]%2; str[i]=str[i]/2; } num[7]=num[7]^num[6]^num[5]^num[4]^num[3]^num[2]^num[1]^num[0]^1;//异或运算符^ for(int j=7;j>=0;j--) if(j==0)printf("%d\n",num[j]); else printf("%d",num[j]); } } return 0; }
2,加法器
- 题目描写叙述:
-
实现一个加法器,使其可以输出a+b的值。
- 输入:
-
输入包含两个数a和b,当中a和b的位数不超过1000位。
- 输出:
-
可能有多组測试数据,对于每组数据,
输出a+b的值。
- 例子输入:
-
2 6 10000000000000000000 10000000000000000000000000000000
- 例子输出:
-
8 10000000000010000000000000000000
总结:写的不好,实现了。
#include<iostream> #include<string> using namespace std; #define max_n 1020 int main(){ string str1,str2; int i,j,s,jin; int len1,len2; while(cin>>str1 && cin>>str2){ int num1[max_n] = {0}; int num2[max_n] = {0}; int sum[max_n] = {0}; len1 = str1.length(); len2 = str2.length(); j=0; for(i=len1-1;i>=0;i--){ num1[j++] = str1[i] - '0'; } j=0; for(i=len2-1;i>=0;i--){ num2[j++] = str2[i] - '0'; } jin=0; for(i=0;i<max_n;i++){ s=num1[i] + num2[i] + jin; sum[i] = s % 10; jin = s / 10; } for(i=max_n - 1;i>=0;i--){ if(i != 0){ if(sum[i] != 0){ for(j = i;j >= 0;j--){ cout<<sum[j]; } break; } }else{ cout<<sum[0]; } } cout<<endl; } return 0; }