奇校验:使得传入的信息位和校验位的1的个数和为奇数;
偶校验:使得传入的信息位和校验位的1的个数和为偶数;
for example:011010,1的个数为3,则奇校验位为0(因为1的个数已经为奇数),偶校验位为1;
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[10050];
int sum1_check(char *s)//检查1的位数;
{
int l=strlen(s);
int sum1=0;
for(int i=0;i<l;i++)
{
if(s[i]=='1')
{
sum1++;
}
}
return sum1;
}
int odd_check(int sum1)//奇校验;
{
if(sum1%2==0)
{
return 1;
}
else
{
return 0;
}
}
int even_check(int sum1)//偶校验;
{
if(sum1%2==0)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
int i,j;
while(scanf("%s",s)!=EOF)
{
int sum1=sum1_check(s);
puts(s);
printf("1的位数为:%d\n",sum1);
printf("奇校验位为:%d\n",odd_check(sum1));
printf("偶校验位为:%d\n\n",even_check(sum1));
}
return 0;
}