AlgoMooc
← 返回题库

K0032. 魔法校验和

简单通过率 53% · 提交 75 · 通过 40
模拟字符串位运算

小慕正在开发一个数据校验工具,用于确保项目中的关键信息不被意外篡改。这些信息由一系列字节组成,每个字节用2位十六进制数字表示。为了提高传输可靠性,小慕设计了一种称为“”的验证方法。 校验和的计算规则如下: 1. 补齐规则:如果待校验的字节长度不是4的倍数,则在尾部使用值为 `0xFF` 的字节(最多补充3个字节)。 2. 计算规则: - 假设补齐后的字节长度除以4,得到一个正整数 `n`。 - 若 `n` 等于1,内容即为校验和; - 若 `n` 大于1,首先取开头4个字节与第5-8字节进行,然后运算结果与随后的4个字节继续进行异或运算,直至结束,最后的结果即为校验和。 现在,小慕需要你根据给定的数据,计算并输出其校验和。

提示:带虚线的词点一下有通俗解释。

输入描述

输入为一个十六进制字符串表示的、合法的魔法符文,每2个字符(输入仅为 `[0-9A-F]`)表示一个字节,字节之间以单空格分隔;字符串首尾无空格,长度范围:`[2,200]`。

输出描述

输出为一个十六进制字符串形式的魔法校验和,格式如 `0000000A`。

示例

示例 1

输入

61 62 63 64 32 30 31 32 4C 61 62

输出

1F3330A9

说明:1. 输入符文的字节长度为11。 2. 补齐为4的倍数后为 `61 62 63 64 32 30 31 32 4C 61 62 FF`,倍数为3。 3. 每次取4个字节,第一次取得的 `0x61626364`,与第二次取得的 `0x32303132`,异或运算结果为 `0x53525256`,运算结果继续与第三次取得的 `0x4C6162FF` 进行异或运算。 4. 最后得到十六进制数值 `0x1F3330A9`,结果输出为字符串 `1F3330A9`,注意:不用在前面增加 `0x`。

示例 2

输入

41

输出

41FFFFFF

示例 3

输入

68 75 61 77 65 69

输出

0D1C9E88

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。