🧰 UtlKit

罗马数字怎么换算: 1994 变 MCMXCIV, 2026 变 MMXXVI, 3999 是这个系统能写出的最后一个数

一个输入框, 两个方向: 1,994 变成 MCMXCIV, MCMXCIV 换回 1994, 严格模式拒绝 IL, IC, XXXXII, 而 MMMM 照样能读.

罗马数字转换器只有一个输入框, 却同时双向工作. 输入 1994, 它回答 MCMXCIV; 输入 MCMXCIV, 小写或字母间带空格都可以, 它回答 1994. 结果卡并排显示阿拉伯数字和罗马数字, 各带一个复制按钮; 下方参考表列出七个基本符号: I 是 1, V 是 5, X 是 10, L 是 50, C 是 100, D 是 500, M 是 1,000.

数字如何被拆开

转换器按从大到小的 13 步表工作: M (1,000), CM (900), D (500), CD (400), C (100), XC (90), L (50), XL (40), X (10), IX (9), V (5), IV (4), I (1), 每步把能放下的符号追加进结果. 1,994 就是 M 取 1,000, CM 取 900, XC 取 90, IV 取 4: MCMXCIV. 年份 2,026 依次是 MM, XX, VI: MMXXVI. 占位符里的例子 42 落在 XL 再 II: XLII.

六个减法规则

合法的减法只有六种: IV (4), IX (9), XL (40), XC (90), CD (400), CM (900). 校验器是一条严格的规范顺序模式, 所以 49 写作 XLIX 而不是 IL; 99 写作 XCIX 而不是 IC; 44 写作 XLIV, 因为像 XXXXII 那样连排四个 X 违反同一符号最多重复三次的规则. VV, IIII, XM 会被同样拒绝: 模式检查 M 段, C 或 D 段, X 或 L 段, I 或 V 段必须依次降序出现, 且不允许其他组合.

取值范围和一个漏洞

阿拉伯数字必须是 1 到 3,999 之间的整数; 0 和 4,000 都会得到范围错误. 3,999 是规范写法里最大的罗马数字, 写作 MMMCMXCIX: 三个 M, 再 CM, 再 XC, 再 IX. 漏洞在于: 罗马数字输入完全没有上限. 模式允许任意长的 M 连排, 所以 MMMM 被解析成 4,000, MMMMM 解析成 5,000, 尽管任何阿拉伯数字输入都不可能产出这两个字符串.

输入框实际接受什么

输入框先尝试把文本读成整数, 只有当文本与这个整数完全一致时才转换. 两侧带多余空格的 42 可以工作, 因为文本先被修剪; 但 42.0 不行: 它解析成 42, 两个字符串不一致, 于是文本改按罗马数字处理并被拒绝. 带逗号的 1,994 行为相同. 罗马这一侧, 字母大小写和内部空格都无所谓: mcmxciv 和 m c m x c i v 都返回 1994.

这个数字用在哪

罗马数字活在年份牌, 章节标记和钟表盘上, 所以 2,026 在文凭或片头卡上写作 MMXXVI. MCMXCIV 是 7 个字符, 而 1994 只有 4 个; 字符计数器把这种长度差变得具体. 用文本反转器把字母倒过来得到 VICXMCM, 转换器拒绝它, 这是顺序规则有多严的一次快速演示. 进制转换器覆盖数字系统的另一面: 1994 在二进制是 11111001010, 在十六进制是 7CA; 摩斯电码工具则是最近的亲戚: 另一种用小而固定的字母表拼出数值的方案.

相关阅读

凯撒 rot13工具是罗马时代留下的另一个经典: 它把每个字母平移固定位数, 而不是用符号组合出数字. 另一篇比例主题的教程看宽高比怎么算, 文本侧的清洗步骤看转义工具怎么用.

相关工具

常见问题

为什么阿拉伯数字输入到 3,999 就停了?

3,999 是规范罗马数字系统能写出的最大数: 三个 M 表示 3,000, 再加 CM, XC, IX, 拼成 MMMCMXCIX. 4,000 位没有基础符号, 所以工具返回范围错误而不是发明新符号. 但罗马侧接受任意长度的 M 连排, MMMM 仍会读成 4,000, 尽管没有任何阿拉伯输入能产出它.

为什么 49 写作 XLIX 而不是 IL?

合法的减法只有 6 组: IV, IX, XL, XC, CD, CM. I 只能减它上方的 V 和 X, 所以 L 前面的 I 不是被识别的模式. XLIX 是 XL (40) 加 IX (9); 严格的校验器拒绝 IL, 因为各个段必须保持降序: 先是 X 减 L, 再是 I 减 V.

转换器是双向工作的吗?

是的. 同一个输入框自动判断: 文本恰好是一个整数就走阿拉伯路径, 其他任何输入都进罗马路径. 输入 1994, 结果卡显示 MCMXCIV; 输入 MCMXCIV, 大小写随意, 有空格没空格都行, 结果卡显示 1994. 两个方向都能干净地往返: MCMXCIV 再过一遍转换器就回到 1994.

输入 0, 4,000 或 42.0 会怎样?

0 和 4,000 都落到范围错误, 因为阿拉伯侧只接受 1 到 3,999 之间的整数. 42.0 是微妙的那个: 它解析成数字 42, 但文本 42.0 与 42 这两个字符串并不相同, 所以输入框不再把它当数字, 而是交给罗马校验器, 后者把它拒为无效罗马数字. 报的是无效输入错误, 不是范围错误.

把罗马数字的字母倒过来会怎样?

你会得到校验器拒收的字符串. MCMXCIV 倒过来读作 VICXMCM: 模式要求先是 M 段, 再是 C 或 D 段, 再是 X 或 L 段, 再是 I 或 V 段, 全部降序. VICXMCM 以 V 开头, 而 V 属于最小的段, 所以整串不匹配模式, 转换器返回无效罗马数字错误而不是一个数字.

相关文章