题目很难理解,可是很简单,就是给定一个256进制的数,取余。
下面是代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int q = 34943;
const int d = 256;
char m[1025];
char ans[5];
int main()
{
while(gets(m))
{
if(m[0] == '#') break;
int lenString = strlen(m);
if(lenString == 0)
{
printf("00 00\n");
continue;
}
//get remainder
long long re = 0;
for(int i = 0;i < lenString;i++)
{
re = (re * d + m[i]) % q;
}
//there are aother bit.
re = re * d * d % q;//if re is a bit big,then re*d*d may overflow!so re should be long long
int crc = re? q-re:0;
sprintf(ans,"%04X",crc);//turn decimal into hexadecimal
printf("%c%c %c%c\n",ans[0],ans[1],ans[2],ans[3]);
}
return 0;
}