?? 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 + -