http://www.bnuoj.com/bnuoj/contest_show.php?cid=2322#problem/25801
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define MOD 34943
using namespace std;
char str[1030];
char ans[5];
int main()
{
while(gets(str), strcmp(str, "#")) {
int i, length;
long long remain = 0;
length = strlen(str);
if(length == 0) {
printf("00 00\n");
continue;
}
for(i = 0; i < length; i ++) {
remain = ((remain << 8) + str[i]) % MOD;
}
remain = (remain << 16) % MOD ; // 这里不能忘记还要一次右移再取余,因为只是加了最后一个字符取余,实际之前还有16位
remain = MOD - remain;
strcpy(ans, "0000");
i = 3;
while(remain > 0) {
if(remain % 16 < 10)
ans[i--] = remain % 16 + '0';
else
ans[i--] = (remain % 16) - 10 + 'A';
remain >>= 4;
}
printf("%c%c %c%c\n", ans[0], ans[1], ans[2], ans[3]);
//printf("%x %x\n", dis >> 8, dis % 256); //一开始还想直接这样输出的,结果显然不行
}
return 0;
}