AlgoMooc
← 返回题库

K0039. 魔法栈指令解析与操作执行

中等通过率 65% · 提交 83 · 通过 54
模拟字符串

小慕正在参与一个古老的魔法项目——符文解析术,这个项目需要他操控一个魔法栈来执行一系列指令。每一条指令都隐藏在神秘的中,只有最细心的研究者才能正确解析它们。 给定一个不含空格的十六进制符文字符串 `S`,其中包含多种魔法栈操作指令。小慕的任务是解析 `S` 并执行所有指令,最终输出栈中的所有元素,从栈顶到栈底依次输出。

提示:带虚线的词点一下有通俗解释。

输入描述

- 输入仅包含 **一个** 由 `0-9` 和 `A-F` 组成的十六进制字符串 `S`。 - `1 <= |S| <= 10^5`。 符文字符串 `S` 可能包含以下 5 类魔法指令: **1. 符文刻印(数值入栈)** - 指令格式:`C000XXXXXXXX` - 作用:将 `XXXXXXXX`(8 个十六进制字符)转换为 **十进制数 `X`** 并**压入栈**。 **2. 符文计算(栈顶运算)** - **加法符文 (`C001`)**: - 需要**栈顶的两个元素 `A` 和 `B`**(若栈不足 2 个,则缺少的部分用 `0` 代替)。 - 计算 `A + B` 并**压入栈**。 - **减法符文 (`C002`)**: - 计算 `A - B`(使用补码计算)并**压入栈**。 - **乘法符文 (`C003`)**: - 计算 `A * B` 并**压入栈**。 **3. 符文湮灭(弹出栈顶元素)** - 指令格式:`C004` - 作用:弹出栈顶元素(若栈为空,则忽略此操作)。 **4. 时间跳跃(忽略后续命令)** - 指令格式:`C021XXXXXXXX` - 作用: - 将 `XXXXXXXX`(8 个十六进制字符)转换为 **十进制数 `X`** - **跳过接下来的 `X` 条指令**,直接解析之后的符文指令。 - `C000` 和 `C021` 的参数部分**保证完整**。

输出描述

- 第一行输出一个整数 `m`,表示栈中的元素个数。 - 接下来 `m` 行按**从栈顶到栈底**的顺序,依次输出栈中的元素。

示例

示例 1

输入

C0000000001AC0000000000AC001

输出

1
36

说明:C0000000001A → 解析 `0000001A` 为 `26`,入栈 [26] C0000000000A → 解析 `0000000A` 为 `10`,入栈 [26, 10] C001 → 取出 26, 10,计算 `26 + 10 = 36`,入栈 [36]

示例 2

输入

C00000000014C002

输出

1
20

说明:C00000000014 → 解析 `00000014` 为 `20`,入栈 [20] C002 → 需要 `A = 20, B = 0`(因栈中只有 1 个数)。 计算 `20 - 0 = 20`,入栈 [20]

示例 3

输入

C00000000005C003

输出

1
0

说明:C00000000005 → 解析 `00000005` 为 `5`,入栈 [5] C003 → 需要 `A = 5, B = 0`(因栈中只有 1 个数)。 计算 `5 * 0 = 0`,入栈 [0]

示例 4

输入

C0000000000AC00000000005C003C00000000003C001C002C00000000014C004C02100000002C00000000032

输出

1
53

说明:C0000000000A → 10 入栈 [10] C00000000005 → 5 入栈 [10, 5] C003 → 10 * 5 = 50 入栈 [50] C00000000003 → 3 入栈 [50, 3] C001 → 50 + 3 = 53 入栈 [53] C002 → 53 - 0 = 53(栈不足 2 个,B = 0)入栈 [53] C00000000014 → 20 入栈 [53, 20] C004 → 弹出 20,栈变为 [53] C02100000002 → 跳过 2 条指令 C00000000032 → 被跳过,不执行

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。