#3349. 变长编码
变长编码
问题描述
小明学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。但他认为生活中常用的数(如0~1)用4字节补码表示太浪费。于是,他研究了一种正整数的变长编码方式,规则如下:
-
将正整数转换为二进制形式。例如:
- (0)10 = (0)2
- (926)10 = (1110011110)2
-
将二进制数从低位到高位切分成每组7 bit,不足7 bit的高位补0。例如:
- (0)2 →
0000000
(一组) - (1110011110)2 →
0011110
和0000111
(两组)
- (0)2 →
-
从低位组开始,为每组添加最高位:
- 如果是最后一组,最高位填
0
;否则填1
。 - 例如:
- 0的编码为
00000000
(1字节) - 926的编码为
10011110
(0x9E
)和00000111
(0x07
)(2字节)
- 0的编码为
- 如果是最后一组,最高位填
输入描述
输入第一行包含一个正整数N,约定N不大于1018。
输出描述
输出一行,为N的变长编码的每个字节(十六进制表示,A-F大写),字节间用空格分隔。
样例
样例输入1
0
样例输出1
00
样例输入2
926
样例输出2
9E 07
样例输入3
987654321012345678
样例输出3
CE 96 C8 A6 F4 CB B6 DA 0D
202309
相关
在下列比赛中: