#3349. 变长编码

变长编码

问题描述

小明学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。但他认为生活中常用的数(如0~1)用4字节补码表示太浪费。于是,他研究了一种正整数的变长编码方式,规则如下:

  1. 将正整数转换为二进制形式。例如:

    • (0)10 = (0)2
    • (926)10 = (1110011110)2
  2. 将二进制数从低位到高位切分成每组7 bit,不足7 bit的高位补0。例如:

    • (0)20000000(一组)
    • (1110011110)200111100000111(两组)
  3. 从低位组开始,为每组添加最高位:

    • 如果是最后一组,最高位填0;否则填1
    • 例如:
      • 0的编码为 00000000(1字节)
      • 926的编码为 100111100x9E)和 000001110x07)(2字节)

输入描述

输入第一行包含一个正整数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