题目描述
【问题描述】
⼩明刚刚学习了三种整数编码⽅式:原码、反码、补码,并了解到计算机存储整数通常使⽤补码。但他总是觉得,⽣活中很少⽤到 231-1这么⼤的数,⽣活中常⽤的0~100这种数也同样需要⽤4个字节的补码表⽰,太浪费了些。热爱学习的⼩明通过搜索,发现了⼀种正整数的变长编码⽅式。这种编码⽅式的规则如下:
1、对于给定的正整数,⾸先将其表达为⼆进制形式。例如,(0){10}=(0){2},(926){10}=(1110011110){2}
2、将⼆进制数从低位到⾼位切分成每组7bit,不足7bit的在高位用0填补,例如,(0){2}变为00000000的一组,(1110011110){2}变为0011110和0000111的两组
3、由代由代表低位的组开始,为其加⼊最⾼位。如果这组是最后⼀组,则在最⾼位填上0,否则在最⾼位填上1,于是,0的变长编码为 00000000 一个字节,926的变长编码为10011110 和 00000111两个字节。
这种编码⽅式可以⽤更少的字节表达⽐较⼩的数,也可以⽤很多的字节表达⾮常⼤的数。例如,987654321012345678的二进制为(0001101 1011010 0110110 1001011 1110100 0100110 1001000 0010110 1001110){2},于是它的变长编码为(十六进制表示) CE 96 C8 A6 F4 CB B6 DA 0D,共9个字节。
你能通过编写程序,找到一个正整数的变长编码吗?
【输入格式】
输入第一行,一个正整数N,0≤N≤1018
【输出格式】
输出一行,输出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
输入
输出
样例输入 复制
987654321012345678
样例输出 复制
CE 96 C8 A6 F4 CB B6 DA 0D