#P1588. Reverse Roman Notation
Reverse Roman Notation
本题没有可用的提交语言。
描述
赫尔墨斯波塞冬 (HP) 公司推出了一款新型计算器 HP CXX,它采用了最新的现代技术。它支持对从 到 的整数值进行四则基本算术运算。
在本题中,您将模拟 HP CXX。每行输入要么是一个正整数的罗马数字表示(介于 (1) 和 (4999) 之间),然后将其推送到虚拟堆栈的顶部;要么是对堆栈顶部两个值执行的算术运算 ( )。此外,还有 = 运算,该运算请求打印堆栈顶部的值(当然,以罗马数字表示)。
对于 - 运算,用堆栈中的第二个数字减去第一个数字。对于 运算,用堆栈中的第二个数字除以第一个数字。尝试除以 0 会导致错误消息“除以零异常”。发生这种情况时,将被除数(非零数)压回堆栈,但除数(零)不压回。
如果请求执行操作,而堆栈中的数字不足,则打印错误“堆栈下溢”,并保持堆栈不变。这适用于二进制运算 和打印运算 。
如果尝试打印一个小于或等于 0 的数字,或者大于 (4999) 的数字,则显示错误消息“超出范围异常”,并继续输入下一行。
罗马数字
对于不熟悉罗马数字的人,以下是简要概述:
罗马数字中使用的每个字母代表不同的数字:
Roman Numeral Number
--------------------------
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
一串字母表示它们的值应该相加。例如,,。如果较小的值放在较大的值前面,
我们会用减法代替加法。例如,,。
除了 之外,不要将超过三个相同的字母相加。
只能减去 10 的幂,例如 、 或 。45 不允许写成 :应该写成 。 一个数字只能减去一个字母。8 写成 ,而不是 ;19 写成 ,而不是 。 不要用一个字母减去另一个大于 10 倍的字母。这意味着你只能用 或 减去 ,用 或 减去 ,所以 MIM 是非法的。
输入
每行输入包含以下任一内容:
至 之间的罗马数字,或 算术运算符 、、 或 ,或打印运算符 输入结束于文件末尾。
输出
将输出一行:
对于每个打印操作,打印堆栈顶部的值,或 单独一行显示一条错误消息: 除零异常 堆栈下溢 超出范围异常 不应生成其他输出
I
I
+
=
II
*
=
VIII
-
=
II
IV
out of range exception