P14602 [NWRRC 2025] Compact Encoding

题目描述

二进制格式通常使用紧凑的整数表示方法。考虑将一个 32 位无符号整数写入文件:你必须始终保留 4 个字节来表示它(记住,8 位构成一个字节)。然而,在许多实际应用中,整数值往往很小。使用固定的 4 字节表示法来写入这些小数值会导致文件大部分被零字节填充。 为了使表示更紧凑,我们引入以下编码方案。每个值表示为一个字节序列 $b_1, b_2, \ldots, b_k$,其中每个 $b_i$ 是 $0$ 到 $255$ 之间的整数(包含)。每个字节的最高有效位用作继续标志,较低的 $7$ 位携带实际数据。如果继续标志为 $1$,则表示后面还有更多字节;对于最后一个字节,该标志为 $0$。该表示是 **大端序** 的,意味着 $b_1$ 包含编码值的最高有效位。 例如,以下是 $n = 112025$ 的紧凑表示方法。首先,我们找到它的二进制表示: $$112025 = 11011010110011001_2$$ 接下来,我们将其分割为 7 位块,必要时在左侧用零填充: :::align{center} $0000110$ / $1101011$ / $0011001$ ::: 前两个块后面还有块,因此对应字节的最高有效位设置为 $1$。最后一个块没有后续块,因此其最高有效位为 $0$。这给我们: $$\begin{array}{l} b_1 = 10000110_2 = 134\\ b_2 = 11101011_2 = 235\\ b_3 = 00011001_2 = 25\\ \end{array}$$ 给定一个整数 $n$,你的任务是找到它的紧凑表示。

输入格式

仅一行包含一个整数 $n$($0 \le n \le 2^{31}-1$)。

输出格式

输出 $0$ 到 $255$ 之间(包含)的整数序列,表示 $n$ 的紧凑编码。编码不能包含数据位为零的前导字节:也就是说,不能以 $128$ 开头。

说明/提示

翻译由 DeepSeek V3 完成