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 完成