Что такое конвертер даты в римские цифры?
Этот инструмент превращает обычную календарную дату в строку из римских цифр — например, XII_XXV_MMXXIV — и умеет работать в обратную сторону, переводя римские цифры в привычные арабские числа. Такой формат особенно популярен для татуировок, гравировки на украшениях, обручальных колец, подарков к годовщине и памятных надписей: даты римскими цифрами выглядят классически и вне времени.
Как пользоваться
Введите значение в каждое из полей «Месяц», «День» и «Год». Любое поле принимает либо арабское число (например, 12), либо римскую запись (например, XII) — конвертер сам определит, что вы ввели, и выдаст вторую форму. Так он работает в обе стороны, поле за полем. Выберите Формат, чтобы задать порядок трёх частей: US (месяц, день, год), EU (день, месяц, год) или ISO (год, месяц, день). Укажите Разделитель — символ между частями: точка, средняя точка, маркер, дефис, пробел, нижнее подчёркивание или слэш. Оставьте поле пустым — и эта часть просто не появится в результате.
Как это устроено
Для перевода из арабских чисел в римские используется стандартная вычитательная запись. Конвертер перебирает пары «значение — символ» по убыванию (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) и каждый раз «жадно» добавляет самый крупный подходящий символ, вычитая его значение, пока ничего не останется:
$$n = \sum_{i} \text{symbol}_i \quad \text{(greedy subtractive: }1000{=}M,\ 900{=}CM,\ \dots,\ 1{=}I\text{)}$$$$\text{while } n>0:\ \text{append largest symbol} \le n,\ n \mathrel{-}= \text{its value}$$
Для обратного перевода — из римских в арабские — он читает запись слева направо: если за символом следует больший символ, текущий вычитается (как в \(IX = 9\)), иначе прибавляется.
$$v = \sum_i \begin{cases} -s_i & s_i < s_{i+1} \\ +s_i & \text{otherwise} \end{cases}$$
Разбор на примере
Возьмём месяц=12, день=25, год=2024 в формате US с нижним подчёркиванием в качестве разделителя: 12 превращается в XII, 25 — в XXV, а 2024 — в MMXXIV (\(MM=2000\), \(XX=20\), \(IV=4\)). Соединив их в порядке US, получаем XII_XXV_MMXXIV. Переключите формат на ISO с точкой-разделителем — и выйдет MMXXIV.XII.XXV.
Частые вопросы
Какое максимальное число можно перевести? 3999 (MMMCMXCIX). В классической системе римских цифр нет отдельного символа для 4000, поэтому большие значения не поддерживаются.
Можно ли показать год 0 или отрицательные числа? Нет. У римлян не было символа для нуля, а минимально возможное значение — 1.
Проверяет ли инструмент, что дата существует? Нет. Каждая часть переводится отдельно, поэтому конвертер спокойно переведёт «31-й день» во «2-м месяце» — это чистый конвертер чисел, а не проверка корректности календаря.