Software CRC

题意翻译

Software CRC (软件CRC) 你为一家使用大量个人电脑的公司工作。你的老板,Penny Pincher博士想把电脑连在一起已经有一段间了,但一直不愿意花钱 你推荐的以太网板。你不知不觉地指出,每一个 pcs是从供应商那里来的,它具有异步串行端口,不需要额外的费用。Pincher博士, 当然,承认她的机会,并分配你的任务,编写必要的软件 PC之间的通信. 你读了一些关于通讯的书,知道每一条通讯都有错误, 这个问题的典型解决方案是将一些错误检查信息附加到 每条留言。此信息允许接收程序检测传输错误何时发生 发生(多数情况下)。所以,你去图书馆,借一本最大的通讯书籍 可以找到并花费你的周末(无报酬加班)阅读关于错误检查。 最后,您决定crc(循环冗余检查)是适合您的情况的最佳错误检查 并给Pincher博士写一份说明,详细说明下面提到的拟议的错误检查机制。 CRC一代 要传送的讯息被视为长的正二进制数。第一个字节 作为二进制数字中最重要的字节处理。第二个 Byte是下一个最重要的,等等。这个二进制数会被称为"M"(对于讯息)。 而不是传送"M",你会传送一条讯息,"M2",由"M"所组成 由一个双字节crc值。 选择crc值,使得"M2"除以某个16位值"g"时离开 剩余的0。这使得接收程序可以很容易地确定 消息已被传输错误损坏。它简单地将收到的任何消息分开 由"g"。如果除法的余数为零,则假定没有发生错误。 你会注意到书中“g”的建议值大部分都是奇数,但你不明白 任何其他相似之处,所以选择"g"的值34943(生成器值)。 您将设计一个算法,用于计算与下列任何消息相对应的crc值 可能会被送来。要测试此算法,您将编写一个程序,从标准输入读取行写给标准输出。 输入: 每一行输入的字符不超过1024个(每一行的字符最多,但不包括行字符的结尾)作为输入,输入由列1中包含“#”的行终止。 输出: 对于每个输入行计算包含在行中的消息的crc值,并写入 输出行上的crc字节(十六进制表示法)的数值。 请注意,每个crc打印的值应该在0到34942(十进制)之间。 输入样例: ``` this is a test A # ``` 输出样例: ``` 77 FD 00 00 0C 86 ```

题目描述

[problemUrl]: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=64 [PDF](https://uva.onlinejudge.org/external/1/p128.pdf) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA128/2ed0a2961b881ebefab6464e3345553e002df0c8.png)

输入输出格式

输入格式


![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA128/bfbdaaa48bb848a17ac2a5ab1bcae82f4ecb4334.png)

输出格式


![](https://cdn.luogu.com.cn/upload/vjudge_pic/UVA128/48234fb6a73fd634750ac85257ec7843b5e06d8d.png)

输入输出样例

输入样例 #1

this is a test
A
#

输出样例 #1

77 FD
00 00
0C 86