#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define DEC 2
unsigned btoi(char pt[])
{
int le=0,i;
unsigned sum=0;
le=strlen(pt);
for(i=0;i<le;i++)
{
if(pt[i]=='1')
sum=sum+(unsigned)(pow(2,le-1-i));
}
return sum;
}
unsigned CRC_Calc(unsigned *Kx,unsigned Gx)
{
int bi=0;
char bu[32];
itoa(Gx,bu,2);
bi=strlen(bu);
*Kx=(*Kx)*(unsigned)pow(2,bi-1);
return Gx-(*Kx%Gx);
}
int main()
{
int f=1;
unsigned g,k,s,r;
char se[32],rx[32],gi[32],ki[32];
while(f)
{
system("cls");
fflush(stdin);
printf("请输入二进制信息码:\n");
gets(ki);
k=btoi(ki);
printf("请输入二进制生成码:\n");
gets(gi);
g=btoi(gi);
r=CRC_Calc(&k,g);
s=r+k;
itoa(r,rx,DEC);
itoa(s,se,DEC);
printf("生成码(Gx):%s\n",gi);
printf("信息码(Kx):%s\n",ki);
printf("发送码(Tx):%s\n",se);
printf("冗余码(Rx):%s\n",rx);
if(s%g==0)
{
printf("\n\tAcceptable!\n");
}
else
{
printf("\n\tUnacceptable!\n");
}
printf("\n是否继续(1=是,0=否)\n");
scanf("%d",&f);
}
return 0;
}