📄 tt.c
字号:
//crc32.c
#include "stdlib.h"
#include "string.h"
#include "stdio.h"
void main()
{
int rlt[33];
//char c;
bool flag=0;
//结果数组初始化
for(int i=0; i<33; i++)
rlt[i]=0;
//CRC-32 = X32 + X26 + X23 + X22 + X16 + X11 + X10 + X8 + X7 + X5 + X4 + X2 + X1 + X0
//CRC_32 = 0x04C10DB7,生成多项式的最高幂次项系数是固定的1,04C11DB7实际上是104C11DB7
char crc32[33]={1,
0, 0, 0, 0,
0, 1, 0, 0,
1, 1, 0, 0,
0, 0, 0, 1,
0, 0, 0, 0,
1, 1, 0, 1,
1, 0, 1, 1,
0, 1, 1, 1};
//这个是X^K+1
for(unsigned int k=1;k<=32768;k++)
{
char *bcs = new char[k + 1 + 32];
//char *s = new char[k + 1 + 32];
//原型:extern void *memset(void *buffer, int c, int count);
//功能:把buffer所指内存区域的前count个字节设置成字符c;
//说明:返回指向buffer的指针.
memset(bcs, 0, sizeof(char)*(k + 1+32));
//memset(s, 0, sizeof(char)*(k + 1+32));
bcs[0] = 1;
bcs[k] = 1;
//flag = 0;
//计算余式,余式按高位到低位的顺序存储在bcs[k]……bcs[k+32]中
unsigned int q = 0;
int zjw = 0;
while (q <= k + 1 - 33 + 32)
{
int i = 0;
if (zjw == 0)
for (i = 0; i <= 32; i++)
if (bcs[i + q] > crc32[i])
break;
else
if (bcs[i + q] < crc32[i])
{
i = 33;
break;
}
if (i <= 32)
{
zjw = 0;
//s[q + 32] = 1;
for (i = 32; i >= 0; i--)
{
if ((bcs[i + q] == 1 && crc32[i] == 1) ||
(bcs[i + q] == 0 && crc32[i] == 0))
bcs[i + q] = 0;
else
bcs[i + q] = 1;
}
}
else
{
zjw = bcs[q];
}
q++;
}
//确定余式的最高位数
int j=k,cnt=0;
while(bcs[j]==0)
{
j++;
if(cnt==32){
//能够整除的情况不统计在内
flag = 1;
break;
}
cnt++;
}
//在每次循环内更新结果
if(flag==0)
rlt[32-cnt]++;
free(bcs);
//free(s);
}
//输出最终结果
for(i=0; i<=32; i++)
printf("最高%2d次:%6d个\n",i,rlt[i]);
//scanf(&c);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -