#ecnu20191C. 和

时间限制: 1.0 秒

空间限制: 256 MB

题目描述

如果学过计算机网络,应当了解 TCP/UDP 的校验和。校验和是一种常见简单的检错方法,也称为循环进位求和。计算步骤为:

  • 将二进制的原数据按连续的 kk 位为一组进行分组(其中 kk 通常是 22 的幂,但本题当中未必),例如 UDP 中取 1616,即为两个字节。二进制分组中,数位从左到右是从高到低排布的的。
  • 将各组相加,相加过程中若产生进位(即计算结果大于等于 2k2^k),则需要将溢出的进位回卷加到最低位继续从低到高计算进位。如果仍有进位则再次回卷,直至数据小于 2k2^k 为止。
  • 最后将得到的和取反码即得所求。

输入格式

从标准输入读入数据。

第一行为一个整数 kk,为分组位数,保证 k100k\le 100

第二行为一个字符串 ss,只包含 01,保证长度不超过 10510^5,保证 sskk 的整数倍。

输出格式

输出到标准输出。

输出一个只包含 01 的字符串,表示计算结果。

4
101101100111
0110

样例 1 解释

首先对 TCP 字符串进行分组,分别是 101101100111

  • 10110110 的首次相加结果为 10001,将溢出位舍弃并加到低位之后,结果为 0010
  • 接下来 00100111 相加为 1001,无需处理进位
  • 最终通过反码输出,结果为 0110
16
1111111111111111
0000000000000000

样例 2 解释

无需进行任何计算,直接输出其对应反码

16
10100000110000111110100101001000
0111010111110011

样例 3 解释

两组进行计算后只有 1 次进位回卷运算。