#ecnu20191C. 和
和
时间限制: 1.0 秒
空间限制: 256 MB
题目描述
如果学过计算机网络,应当了解 TCP/UDP 的校验和。校验和是一种常见简单的检错方法,也称为循环进位求和。计算步骤为:
- 将二进制的原数据按连续的 位为一组进行分组(其中 通常是 的幂,但本题当中未必),例如 UDP 中取 ,即为两个字节。二进制分组中,数位从左到右是从高到低排布的的。
- 将各组相加,相加过程中若产生进位(即计算结果大于等于 ),则需要将溢出的进位回卷加到最低位继续从低到高计算进位。如果仍有进位则再次回卷,直至数据小于 为止。
- 最后将得到的和取反码即得所求。
输入格式
从标准输入读入数据。
第一行为一个整数 ,为分组位数,保证 。
第二行为一个字符串 ,只包含 0 和 1,保证长度不超过 ,保证 是 的整数倍。
输出格式
输出到标准输出。
输出一个只包含 0 和 1 的字符串,表示计算结果。
4
101101100111
0110
样例 1 解释
首先对 TCP 字符串进行分组,分别是 1011、0110、0111。
1011和0110的首次相加结果为10001,将溢出位舍弃并加到低位之后,结果为0010- 接下来
0010和0111相加为1001,无需处理进位 - 最终通过反码输出,结果为
0110。
16
1111111111111111
0000000000000000
样例 2 解释
无需进行任何计算,直接输出其对应反码
16
10100000110000111110100101001000
0111010111110011
样例 3 解释
两组进行计算后只有 1 次进位回卷运算。