⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 С+

📁 哈腹满编码
💻
字号:
#include<stdio.h>

struct C_code{
  int x;
  int a;
};

main(){
  int i,j,z,flag=0;
  int n,k;
  int f;
  int s;
  int lx=0,cn=0;/*协助校验*/
  struct C_code g[20];
  struct C_code m[20];
  struct C_code c[40];
  struct C_code r[20];
  struct C_code t[20];
  struct C_code q[20];
  struct C_code h[20];  /*保存h(x)*/
  struct C_code b[20];  /*保存xn+1*/
  struct C_code R[20];  /*保存检验玛字*/
  struct C_code l[20];  /*保存检验玛字与h(x)的积*/
  for(i=0;i<20;i++) {g[i].x=i;g[i].a=0;}
  printf("Input (n,k):");
  scanf("%d%d",&n,&k);
  printf("Input the g(x):"); /*输入g(x)的系数不为0的x的次数*/
  for(i=n-k;i>=0;i--){
    scanf("%d",&f);
    g[i].a=f;
  }
  for(i=n-k;i>=0;i--) { if(i==n-k)printf("g(x):"); printf("%d",g[i].a);} printf("\n");/*测试*/
  for(i=0;i<40;i++){
    if(i<20){
      m[i].x=i;m[i].a=0;
      c[i].x=i;c[i].a=0;
      r[i].x=i;r[i].a=0;
      t[i].x=i;t[i].a=0;
      q[i].x=i;q[i].a=0;
      h[i].x=i;h[i].a=0;
      b[i].x=i;b[i].a=0;
      R[i].x=i;R[i].a=0;
      l[i].x=i;l[i].a=0;
    }
    else{
      c[i].x=i;c[i].a=0;
    }
  }
  b[n].a=1;b[0].a=1;

/*求出h(x)*/
while(1){
    j=n;
    while(b[j].a==0) j--;
    for(i=0;i<20;i++) {q[i].x=i;q[i].a=0;}
    printf("j:%d\n",j);
    if(j<n-k) break;
    else{
      s=b[j].x-g[n-k].x;
      h[s].a=1;
      printf("s %d:%d",j,s);printf("\n"); /*测试*/
      for(i=n-k;i>=0;i--){    /*用q(x)存每次商与g(x)的乘积*/
        if(g[i].a==1){
          q[i+s].a=1;
        }
      }
      for(i=n-1;i>=0;i--){ if(i==n-1)printf("q(x) %d:",j); printf("%d",q[i].a);} printf("\n"); /*测试*/
      for(i=j;i>=0;i--){     /*把t(x)每次与q(x)的mod2和修改t(x)的值*/
        b[i].a=(b[i].a+q[i].a)%2;
      }
      for(i=k;i>=0;i--){ if(i==n-1)printf("h(x) %d:",j); printf("%d",h[i].a);} printf("\n"); /*测试*/
    }
  }
 for(i=k;i>=0;i--){ if(i==k)printf("h(x) :"); printf("%d",h[i].a);} printf("\n"); /*测试*/
 leb:
 flag=0;
 for(i=0;i<20;i++) {l[i].x=i;l[i].a=0;}
/*输入验证码子*/
 printf("Input R-code:");
 for(i=n-1;i>=0;i--){
    scanf("%d",&f);
    R[i].a=f;
  }
 for(i=n-1;i>=0;i--)  { if(i==n-1) printf("R[x]:");printf("%d",R[i].a);  }   /*测试*/
/*验证输入码子c(x)*h(x)的值是否为0*/
 for(i=n-1;i>=0;i--){
    if(R[i].a==0) continue;
    else{
      for(j=k;j>=0;j--){
        if(h[j].a==0) continue;
        else{
          lx=R[i].x+h[j].x;
          if(lx>=n) lx=lx-n;
          l[lx].a=(l[lx].a+1)%2;
          printf("\ni:%d l[%d]:%d",i,lx,l[lx].a);/*测试*/
          }
      }
    }
   getch(); /*测试*/
 }
 for(i=n-1;i>=0;i--){
   if(l[i].a==1) flag=1;
   if(i==n-1) printf("\nl[x]=c(x)*h(x)=");
   printf("%d",l[i].a);
 }
 if(flag==1) printf("\n\tError Code !");
 if(flag==0) printf("\n\tRight Code!");
 printf("\nNext code:");
 goto leb;
 getch();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -