{"problem":{"name":"[GESP202309 四级] 变长编码","description":{"content":"小明刚刚学习了三种整数编码方式：原码、反码、补码，并了解到计算机存储整数通常使用补码。但他总是觉得，生活中很少用到 $2^{31}-1$ 这么大的数，生活中常用的 $0\\sim 100$ 这种数也同样需要用 $4$ 个字节的补码表示，太浪费了些。 热爱学习的小明通过搜索，发现了一种正整数的变长编码方式。这种编码方式的规则如下： 1. 对于给定的正整数，首先将其表达为二进制形式。例如，$(0)_{","description_type":"Markdown"},"platform":"Luogu","limit":{"time_limit":1000,"memory_limit":131072},"difficulty":{"LuoguStyle":"P2"},"is_remote":true,"is_sync":true,"sync_url":null,"sign":"LGB3870"},"statements":[{"statement_type":"Markdown","content":"小明刚刚学习了三种整数编码方式：原码、反码、补码，并了解到计算机存储整数通常使用补码。但他总是觉得，生活中很少用到 $2^{31}-1$ 这么大的数，生活中常用的 $0\\sim 100$ 这种数也同样需要用 $4$ 个字节的补码表示，太浪费了些。\n热爱学习的小明通过搜索，发现了一种正整数的变长编码方式。这种编码方式的规则如下：\n\n1. 对于给定的正整数，首先将其表达为二进制形式。例如，$(0)_{\\{10\\}}=(0)_{\\{2\\}}$，$(926)_{\\{10\\}}=(1110011110)_{\\{2\\}}$。\n\n2. 将二进制数从低位到高位切分成每组 $7$ bit，不足 $7$bit 的在高位用 $0$ 填补。例如，$(0)_{\\{2\\}}$ 变为$0000000$ 的一组，$(1110011110)_{\\{2\\}}$ 变为 $0011110$ 和 $0000111$ 的两组。\n\n3. 由代表低位的组开始，为其加入最高位。如果这组是最后一组，则在最高位填上 $0$，否则在最高位填上 $1$。于是，$0$ 的变长编码为 $00000000$ 一个字节， $926$ 的变长编码为 $10011110$ 和 $00000111$ 两个字节。\n\n这种编码方式可以用更少的字节表达比较小的数，也可以用很多的字节表达非常大的数。例如，$987654321012345678$ 的二进制为 $(0001101 \\ 1011010 \\ 0110110 \\ 1001011 \\ 1110100 \\ 0100110 \\ 1001000 \\ 0010110 \\ 1001110)_{\\{2\\}}$，于是它的变长编码为（十六进制表示） `CE 96 C8 A6 F4 CB B6 DA 0D`，共 $9$ 个字节。\n\n你能通过编写程序，找到一个正整数的变长编码吗？\n\n## Input\n\n输入第一行，包含一个正整数 $N$。约定 $0\\le N \\le 10^{18}$。\n\n## Output\n\n输出一行，输出 $N$ 对应的变长编码的每个字节，每个字节均以 $2$ 位十六进制表示（其中， `A-F` 使用大写字母表示），两个字节间以空格分隔。\n\n[samples]\n\n## Background\n\n对应的选择、判断题：<https://ti.luogu.com.cn/problemset/1130>","is_translate":false,"language":"English"}],"meta":{"iden":"LGB3870","tags":["2023","GESP"],"sample_group":[["0","00"],["926","9E 07"],["987654321012345678","CE 96 C8 A6 F4 CB B6 DA 0D"]],"created_at":"2026-03-03 11:09:25"}}