实现指定规则的正整数变长编码并输出十六进制结果
类型:程序题

问题描述

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

  1. 将给定正整数转换为二进制形式。例如:$(0)_{10} = (0)2$,$(926){10} = (1110011110)_2$。
  2. 将二进制数从低位到高位切分为每组7bit,不足7bit的在高位补0。例如:$(0)_2$分为1组0000000;$(1110011110)_2$分为两组00111100000111
  3. 从低位组开始为每组添加最高位:若该组是最后一组,最高位填0,否则填1。例如0的变长编码为1字节00000000,926的变长编码为2字节1001111000000111。 这种编码可根据数值大小动态调整字节数,例如数值$987654321012345678$的变长编码十六进制表示为CE 96 C8 A6 F4 CB B6 DA 0D,共9字节。 请编写程序,计算给定正整数的变长编码。

输入描述

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

输出描述

输出一行,为N对应的变长编码的每个字节,每个字节用2位大写十六进制表示(A-F使用大写字母),字节之间用空格分隔。

样例输入1

0

样例输出1

00

样例输入2

926

样例输出2

9E 07

样例输入3

987654321012345678

样例输出3

CE 96 C8 A6 F4 CB B6 DA 0D
代码编辑器
测试用例(F10) 运行测试(F11) 提交答案(F12)
测试用例输入
{{resultStatus.text}}