我在网上搜索到一个相关的程序
题目是:计算xk+1除CRC-32后的余式,k从1到32768
环境要求:Windows95/98/2000/XP/dos
功能要求:要编写程序;要按余式的次数、为零与否分类统计。
程序:#include "stdlib.h"
#include "string.h"
#include "stdio.h"
void main()
{
int result[33];
//char c;
bool flag=0;
//结果数组初始化
for(int i=0; i<33; i++)
result[i]=0;
//CRC-32 = X32 + X26 + X23 + X22 + X16 + X11 + X10 + X8 + X7 + X5 + X4 + X2 + X1 + X0
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};
//这个是t(x)=X^K+1
for(unsigned int k=1;k<=32768;k++)
{
char *remainder = 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(remainder, 0, sizeof(char)*(k + 1+32));
//memset(s, 0, sizeof(char)*(k + 1+32));
remainder[0] = 1;
remainder[k] = 1;
//flag = 0;
//计算余式,余式按高位到低位的顺序存储在remainder[k]……remainder[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 (remainder[i + q] > crc32[i])
break;
else
if (remainder[i + q] < crc32[i])
{
i = 33;
break;
}
// 各位分别进行模2加运算
if (i <= 32)
{
zjw = 0;
//s[q + 32] = 1;
for (i = 32; i >= 0; i--)
{
if ((remainder[i + q] == 1 && crc32[i] == 1) ||
(remainder[i + q] == 0 && crc32[i] == 0))
remainder[i + q] = 0;
else
remainder[i + q] = 1;
}
}
else
{
zjw = remainder[q];
}
q++;
}
//确定余式的最高位数
int j=k,count=0;
while(remainder[j]==0)
{
j++;
if(count==32)
{
//能够整除的情况不统计在内
flag = 1;
break;
}
count++;
}
//在每次循环内更新结果
if(flag==0)
result[32-count]++;
free(remainder);
//free(s);
}
//输出最终结果
for(i=0; i<=32; i++)
printf("最高%2d次:%6d个\n",i,result[i]);
}
//scanf(&c);
怎么把这个程序修改成适合我的题目意思的啊,求各位大哥指教
小女子在这里谢过了