#G4006. [GESP202309 四级] 变长编码
[GESP202309 四级] 变长编码
题目描述
小明刚刚学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。
但他发现,生活中常用的较小整数也需要使用固定字节数存储,可能会造成空间浪费。于是,他了解了一种针对非负整数的变长编码方式。
编码规则如下:
-
将给定的非负整数转换为二进制形式。
例如:
((0)_{10}=(0)_2)
((926)_{10}=(1110011110)_2)
-
将二进制数从低位到高位,每 bit 分为一组。
如果最高的一组不足 bit,则在高位补 。
例如:
- 分为一组:
0000000; - 分为两组:
0011110、0000111。
- 分为一组:
-
从表示低位的组开始,为每组增加一个最高位,使每组变为 bit:
- 如果当前组不是最后一组,则最高位填
1; - 如果当前组是最后一组,则最高位填
0。
- 如果当前组不是最后一组,则最高位填
因此:
- 的变长编码为
00000000,即十六进制00; - 的变长编码为
10011110、00000111,即十六进制9E 07。
例如, 的变长编码为:
CE 96 C8 A6 F4 CB B6 DA 0D
共 个字节。
请编写程序,求出给定非负整数的变长编码。
输入格式
输入一行,包含一个非负整数 。
输出格式
输出一行,表示 对应的变长编码。
每个字节均使用两位十六进制表示,其中 A 到 F 使用大写字母。
相邻两个字节之间用一个空格分隔。
样例
0
00
926
9E 07
987654321012345678
CE 96 C8 A6 F4 CB B6 DA 0D
数据范围
。