#L0211. 整数变长编码

整数变长编码

题目描述

小红在学习数据压缩时发现了一种非负整数的变长编码方式,规则如下:

第 1 步:将非负整数表示为二进制。例如 (0)10=(0)2(0)_{10} = (0)_2(926)10=(1110011110)2(926)_{10} = (1110011110)_2

第 2 步:从低位到高位每 77 bit 一组切分,最高一组不足 77 bit 时在高位补 00

  • (0)2(0)_2 变为 0000000 一组。
  • (1110011110)2(1110011110)_2 变为 0011110(低位组)和 0000111(高位组)两组。

第 3 步:从低位组开始,为每组在最高位前面加一个标志位:若该组是最后一组(最高组),标志位为 00;否则标志位为 11

于是 00 的编码为 0000000011 个字节),926926 的编码为 100111100000011122 个字节)。

更大的数也可以编码。例如 987654321012345678987654321012345678 的编码(以十六进制表示)为 CE 96 C8 A6 F4 CB B6 DA 0D,共 99 个字节。

请编写程序,对给定非负整数输出其变长编码。

输入格式

一行一个非负整数 NN0N10180 \le N \le 10^{18})。

输出格式

一行,输出 NN 的变长编码每个字节,以 22 位大写十六进制表示,字节间用空格分隔。

样例

0
00
926
9E 07
987654321012345678
CE 96 C8 A6 F4 CB B6 DA 0D
难度 普及-
通过率
尝试 0
已通过 0
ID
939
类型
传统题
Time Limit
1000ms
Memory Limit
128MiB
上传者