📄 С+
字号:
#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 + -