实现正整数的变长编码转换

ez655876 程序题 共 个子题

问题描述

小明学习了原码、反码、补码后,发现小数值用4字节补码存储十分浪费,因此需要实现一种正整数的变长编码方式,规则如下:

  1. 将给定正整数转换为二进制形式,例如:$(0)_{10}=(0)_2$,$(926)_{10}=(1110011110)_2$。
  2. 将二进制数从低位到高位切分为每组7bit,不足7bit的在高位补0。例如:$(0)_2$分为一组0000000,$(1110011110)_2$分为两组0011110和0000111。
  3. 从低位组开始为每个组添加最高位:如果是最后一组,最高位填0,否则填1。例如0的变长编码为1字节00000000,926的变长编码为2字节10011110和00000111。

该编码方式可通过更少字节表示小数值,也可支持极大数值。例如987654321012345678的变长编码十六进制表示为CE 96 C8 A6 F4 CB B6 DA 0D,共9字节。

输入描述

输入第一行包含一个正整数N,约定 $0 \leq N \leq 10^{18}$。

输出描述

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

样例输入1

0

样例输出1

00

样例输入2

926

样例输出2

9E 07

样例输入3

987654321012345678

样例输出3

CE 96 C8 A6 F4 CB B6 DA 0D

本题为编程题,提交代码并运行通过测试点后判分。

正在加载题目数据…
已答 /
子题
该题型需在试卷/作业中作答,单题练习暂不支持
答案解析
提交记录
共 条 仅展示自由练习提交
正在加载提交记录…
讨论
发布
登录后参与讨论 立即登录
发布讨论需先绑定并验证手机号 去绑定手机号
加载中…
我
我
回复 @
回复 @
发送
还没有人讨论,来发表第一条吧