1. Семь основных знаков
| Римский знак | I | V | X | L | C | D | M |
|---|---|---|---|---|---|---|---|
| Значение | 1 | 5 | 10 | 50 | 100 | 500 | 1000 |
Это весь основной алфавит. Другие латинские буквы не являются римскими цифрами в этой системе.
Переводим числа от 1 до 3999 в римскую запись и обратно — с разбором каждого разряда, знака, вычитательной пары и строгой обратной проверкой
Что нужно сделать?
Римская запись не использует позиции и основание так, как десятичная. Она складывает значения семи знаков и в шести строго заданных случаях вычитает меньший знак из следующего большего.
| Римский знак | I | V | X | L | C | D | M |
|---|---|---|---|---|---|---|---|
| Значение | 1 | 5 | 10 | 50 | 100 | 500 | 1000 |
Это весь основной алфавит. Другие латинские буквы не являются римскими цифрами в этой системе.
Когда значения идут от большего к меньшему, их складывают. Каждый знак I добавляет ещё одну единицу.
| Пара | Действие | Значение | Разряд |
|---|---|---|---|
| IV | 5 − 1 | 4 | единицы |
| IX | 10 − 1 | 9 | единицы |
| XL | 50 − 10 | 40 | десятки |
| XC | 100 − 10 | 90 | десятки |
| CD | 500 − 100 | 400 | сотни |
| CM | 1000 − 100 | 900 | сотни |
Нельзя заменить 99 одной парой IC. Правильно разделить 99 на 90 и 9: XC + IX = XCIX.
I, X, C и M могут повторяться подряд до трёх раз в поддерживаемой канонической форме. V, L и D не повторяются: вместо VV пишут X, вместо LL — C, вместо DD — M.
Одного числового значения мало: ошибочная строка тоже может дать число. Калькулятор получает значение и заново строит правильную форму. Совпадение должно быть посимвольным.
В классической школьной записи нет отдельного нуля. Для 4000 и больших чисел встречаются другие исторические соглашения, включая надчёркивание; мы не смешиваем их с обычной записью I–MMMCMXCIX.
| Ошибка | Почему неверно | Каноническая запись |
|---|---|---|
| IIII | Четыре единицы заменяются парой | IV |
| VX | V не используется для вычитания | XV для 15 или V для 5 |
| IC | Нельзя перескочить из единиц сразу к сотням | XCIX |
| IIV | Перед большим знаком не ставят две единицы | III или IV по значению |
| MMMM | Обычный диапазон заканчивается на 3999 | до MMMCMXCIX |
В числе 1012 позиция цифры задаёт степень основания 2. У римской записи нет единого основания и нулевого разряда. Для позиционных систем используйте конвертер систем счисления.
В школьной записи используются семь латинских знаков: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500 и M = 1000.
Разложите число на тысячи, сотни, десятки и единицы, замените каждый ненулевой разряд каноническим римским фрагментом и соедините фрагменты слева направо.
Разберите строку на одиночные знаки и разрешённые вычитательные пары, затем сложите их значения. После этого заново запишите сумму римскими знаками для проверки.
Только IV = 4, IX = 9, XL = 40, XC = 90, CD = 400 и CM = 900. В каждой паре меньший знак стоит непосредственно перед большим.
Современная школьная каноническая форма использует вычитательную пару IV: один перед пятью означает 5 − 1. Форма IIII встречалась исторически, но в этом учебном стандарте не принимается.
Разряды нельзя перескакивать одной парой. 99 состоит из 90 и 9, поэтому правильная запись XCIX: XC = 90 и IX = 9.
I, X, C и M обычно повторяются не больше трёх раз подряд. V, L и D не повторяются. Надёжнее проверять не отдельный запрет, а всю каноническую повторную запись числа.
В классической школьной системе отдельного знака нуля нет. Поэтому калькулятор начинает диапазон с 1 и не использует букву N как замену.
Числа от 4000 требуют других соглашений, например черты над знаком для увеличения значения в тысячу раз. Чтобы не смешивать стандарты, эта страница поддерживает обычную запись до MMMCMXCIX.
Да. Например, mcmxciv будет принято и приведено к каноническому верхнему регистру MCMXCIV. Кириллические буквы и Unicode-глифы вроде Ⅳ не принимаются.
Это непозиционная запись: значение знака не определяется степенью основания, как в двоичной или десятичной системе. Поэтому для неё действуют отдельные правила порядка и вычитательных пар.
Переведите результат обратно. Дополнительно сложите значения токенов и заново закодируйте арабскую сумму: каноническая римская строка должна совпасть полностью.