实现任意位数海明码校验此为奇校验:
int fun1(int n,int len,int h[]){
int sum=0;
for(int i=n;i<=len;i+=(n+1)){
for(int j=i;j<=i+n-1;j++){
sum+=h[j];
}
i=i+n-1;
}
if(sum%2==0) return 1;
return 0;
}
int main()
{
char s[20];
int k;
int sum=0;
int h[20];
gets(s);
int n=strlen(s);
for(int i=0;s[i]!='\0';i++){
h[n-i]=s[i]-'0';
}//赋位数【高-低】
for(int i=n;i>=1;i--){
if(fun(i)){
k=fun1(i,n,h);
sum=sum*2+k;
}
}
if(sum==0)
printf("right\n");
else
printf("出错的是:%d\n",sum);
printf("正确:\n");
for(int i=n;i>=1;i--)
if(i==sum) printf("%d",1-h[i]);
else printf("%d",h[i]);
printf("\n");
return 0;
}