Try:
功能说明
在整数(1 到 3,999,999)与罗马数字之间双向转换。3,999 以上的值使用 vinculum 记法:符号上方的横线把其值乘以 1,000,范围因此扩大一千倍。每个输入都会对照规范形式校验,所以 IIII、VV、IC 和单纯的 MMMM 都会被明确拒绝。分解面板逐步展示每个结果是如何构造出来的。
使用方法
- 选择方向:数字 → 罗马数字或罗马数字 → 数字。有效的值会随切换自动带过去,无需重新输入即可转回来。
- 输入或粘贴一个值。也可以点击示例芯片。
- 结果以大号字体显示。下方的分解面板列出每个贪心步骤及其数值。可以复制结果、分解内容,或指向你确切输入的分享链接。
示例
| 数字 | 罗马数字 | 说明 |
|---|---|---|
| 44 | XLIV | 40 + 4 |
| 1994 | MCMXCIV | 1,000 + 900 + 90 + 4 |
| 3,999 | MMMCMXCIX | 最大的普通罗马数字 |
| 4,000 | I̅V̅ | 第一个 vinculum 值:IV × 1,000 |
| 1,234,567 | M̅C̅C̅X̅X̅X̅I̅V̅DLXVII | 带横线的 1,234 + 普通的 567 |
| 3,999,999 | M̅M̅M̅C̅M̅X̅C̅I̅X̅CMXCIX | 工具接受的最大值 |
罗马数字的工作原理
罗马数字使用七个字母。这就是整个系统:
| 符号 | I | V | X | L | C | D | M |
|---|---|---|---|---|---|---|---|
| 数值 | 1 | 5 | 10 | 50 | 100 | 500 | 1,000 |
两条规则生成每一个规范数字:
- 加法规则。 从左到右读取并相加。
VIII是 5 + 1 + 1 + 1 = 8。较大的字母在前。 - 减法规则。 较小的字母放在较大的前面则做减法。
IV是 5 - 1 = 4,CM是 1,000 - 100 = 900。合法的恰好有六对:IV(4)、IX(9)、XL(40)、XC(90)、CD(400)、CM(900)。这条规则的存在是为了保持数字简短、每个值的拼法唯一:4 是IV,绝不是IIII。
转换算法只有十行。 把 13 个数值按从大到小放进一张表(七个字母加六个减法对),然后贪心地遍历:
VALUES = [1000 M, 900 CM, 500 D, 400 CD, 100 C, 90 XC,
50 L, 40 XL, 10 X, 9 IX, 5 V, 4 IV, 1 I]
to_roman(n):
result = ""
for (value, symbol) in VALUES: # largest first
while n >= value:
result += symbol
n -= value
return result
对于 1994,这个遍历依次产生 M(1,000)、CM(900)、XC(90)、IV(4)。这正是分解面板的内容。解析按同样的逻辑反向运行:从左到右扫描,较小的字母出现在较大的前面时做减法,然后把总数重新渲染并比较。任何能通过这个往返检验的拼法都是规范的——一条检查就足以拒绝 IIII 和 IC。
3,999 以上:vinculum。 字母到 M = 1,000 为止,所以古典用法止步于 3,999。中世纪的 vinculum 扩展了这套系统:上划线把符号乘以 1,000(V̅ = 5,000,M̅ = 1,000,000)。规范形式用同一张贪心表渲染千位部分,再给每个字形加上横线:4,000 是 I̅V̅(4 × 1,000),3,999,999 是带横线的 MMMCMXCIX 后接普通余数 CMXCIX。工具用组合字符(U+0305)承载横线,因此数字可以作为普通文本复制和解析。粘贴长音符(U+0304,视觉上几乎相同)也会被接受并规范化。
补充说明
- 只有规范形式。 每个值只有一种被接受的拼法。非规范输入会被拒绝,不会被猜测。
- 严格范围。 1 到 3,999,999。再往上,中世纪的书写者会叠第二道横线(× 1,000,000);工具到一道为止。
- 私密: 所有转换在本地浏览器中运行。不向任何地方发送数据。
- 相关工具: Number Base Converter、Bitwise Calculator。