Римская нотация использует семь цифр - I , V , X , L , L , D , M . Для представления числа n в римской нотации возьмём количества его единиц n 0 , десятков n 1 , сотен n 2 и тысяч n 3 . Сначала запишем в римской нотации количество единиц. При 0 ⩽ n 0 ⩽ 3 просто запишем подряд цифру I (единица) n 0 раз. При 4 ⩽ n 0 ⩽ 8 запишем цифру V (она обозначает пять), и припишем к ней столько цифр I , на сколько n 0 больше или меньше пяти, причём если больше, то справа, а если меньше, то слева. Наконец, n 0 = 9 запишем как IX (X обозначает десятку, I слева показывает, что до десятки недостаёт единицы).

Точно так же поступим с количеством десятков n 1 , только вместо цифр I =1, V =5, C =10 будем использовать X =10, L =50, C =100.

Те же правила применяются к количеству сотен n 2 , для записи используются цифры C =100, D =500, M =1000.

Для тысяч римских цифр хватит только при 0 ⩽ n 3 ⩽ 3 , так что получится либо M , либо MM , либо MMM .

Все перечисленные правила суммированы в таблице .


Теперь составим вместе записи для n 3 , n 2 , n 1 , n 0 в порядке перечисления. Римская запись числа готова.

Например, число 1987 записывается как MCMLXXXVII . Здесь 1000 = M , 900 = CM , 80 = LXXX и 7 = VII .

Виден недостаток римской нотации: используя шесть цифр, она позволяет представить числа не более 3999 .

Анализ правил перевода чисел в римскую нотацию показывает, что достаточно записать римскими цифрами каждую из десятичных цифр заданного числа, учитывая номер её разряда, а затем составить вместе полученные записи. Правила записи десятичной цифры с помощью римских цифр примерно одни и те же - меняется в зависимости от разряда только лишь набор римских цифр, используемых для записи. Для единиц это I , V , X , для десятков - X , L , C , для сотен - C , D , M , для тысяч - только M (поскольку цифр для пяти и десяти тысяч не предусмотрено).

С учётом этого обстоятельства было бы разумно реализовать в виде процедуры (назовём её toRomanHelper) преобразование десятичной цифры в римскую нотацию. Процедура будет принимать два параметра - десятичную цифру и номер десятичного разряда. Возвращаемое значение - римская запись десятичной цифры, соответствующая её разряду.

Преобразованием числа в римскую запись будет заниматься процедура toRoman . Она разберёт число по десятичным цифрам. Для каждой десятичной цифры найдёт запись римскими цифрами в соответствии с разрядом, в котором она находится (для этого будет вызвана процедура toRomanHelper). Римские записи для десятичных цифр будут соединены вместе и получившаяся строка будет возвращена из процедуры.

Обратное преобразование будет осуществляться в обратном порядке. Строку, представляющую собой римскую запись числа, прежде всего нужно разделить по десятичным разрядам, а затем найдём десятичные цифры, соответствующие этим разрядам.

Задача разделения по разрядам теперь будет сложнее. Дело в том, что не каждая строка, составленная из римских цифр, будет правильной римской записью некоторого числа (в отличие от десятичной записи, в которой правильной будет любая последовательность десятичных цифр).

В соответствии с правилами формирования римской записи чисел правильная запись представляет собой четыре группы римских цифр, составленных вместе. Первая (расположенная слева) - группа, обозначающая тысячи, затем идёт группа сотен, затем десятков, и, наконец, единиц. То, из чего может состоять каждая из этих групп, можно увидеть в соответствующем столбце таблицы 31.1. «Запись десятичных разрядов римскими цифрами» .

Удачным решением было бы использовать регулярные выражения для разделения римской записи на группы цифр по разрядам. Для каждой группы нужно составить шаблон и заключить его в захватывающие скобки. Шаблоны для тысяч, сотен, десятков и единиц, составленные вместе, дадут регулярное выражение, которому должна соответствовать римская запись целиком. Поэтому в регулярное выражение следует добавить привязки к началу и концу строки.

Приступим к созданию шаблона для разряда единиц. Решение, которое первым приходит в голову - перечислить все альтернативы: (|I|II|III|IV|V|VI|VII|VIII|IX) . Обратите внимание на пустую альтернативу, с которой начинается перечисление: группа единиц в римской записи может быть и пустой. Это решение можно немного упростить, если использовать квантификаторы. Для цифр от 0 до 3 можно написать I{0,3} вместо |I|II|III , для цифр от 5 до 8 годится VI{0,3} вместо V|VI|VII|VIII . Таким образом, для разряда единиц получаем шаблон (I{0,3}|IV|VI{0,3}|IX) . Его можно дополнительно упростить, объединив первую альтернативу с третьей, а вторую с четвёртой: (V?I{0,3}|I) .

Для десятков и сотен получаются точно такие же шаблоны, только составленные из других римских цифр: (L?X{0,3}|X) (десятки) и (D?C{0,3}|C) (сотни). Для разряда тысяч шаблон совсем простой: (M{0,3}) .

Итак, для целой римской записи получаем такое регулярное выражение: ^(M{0,3})(D?C{0,3}|C)(L?X{0,3}|X)(V?I{0,3}|I)$ .

Мы все пользуемся римскими цифрами – отмечаем ими номера веков или месяцев года. Римские цифры находятся на часовых циферблатах, в том числе на курантах Спасской башни. Мы их используем, но знаем про них не так много.

Как устроены римские цифры

Римская система счета в ее современном варианте состоит из следующих базовых знаков:

I 1
V 5
X 10
L 50
C 100
D 500
M 1000

Чтобы запомнить цифры, непривычные для нас, пользующихся арабской системой, существует несколько специальных мнемонических фраз на русском и английском языках:
Мы Dарим Сочные Lимоны, Хватит Vсем Iх
Mы Dаем Cоветы Lишь Xорошо Vоспитанным Iндивидуумам
I Value Xylophones Like Cows Dig Milk

Система расположения этих цифр друг относительно друга такова: числа до трех включительно образуются при помощи сложения единиц (II, III), - четырехкратное повторение любой цифры запрещено. Чтобы образовать числа больше трех, складываются или вычитаются большая и меньшая цифры, для вычета меньшая цифра ставится перед большей, для прибавления - после, (4 = IV), та же логика действует и с другими цифрами (90 = XC). Порядок расположения тысяч, сотен, десятков и единиц тот же, что и привычный нам.

Важно, что любая цифра не должна повторять больше трех раз, таким образом, самое длинное число до тысячи – 888 = DCCCLXXXVIII (500+100+100+100+50+10+10+10+5+1+1+1).

Альтернативные варианты

Запрет на четвертое использование одной и той же цифры подряд стал появляться только в XIX веке. Поэтому в старинных текстах можно увидеть варианты IIII и VIIII вместо IV и IX, и даже IIIII или XXXXXX вместо V и LX. Остатки этого написания можно увидеть на часах, где четыре часто отмечается именно с помощью четырех единиц. В старых книгах также нередки случаи двойных вычитаний – XIIX или IIXX вместо стандартных в наши дни XVIII.

Также в Средневековье появилась новая римская цифра – ноль, который обозначался буквой N (от латинского nulla, ноль). Большие числа отмечались специальными знаками: 1000 - ↀ (или C|Ɔ),5000 – ↁ(или |Ɔ),10000 – ↂ (или CC|ƆƆ). Миллионы получаются при двойном подчеркивании стандартных цифр. Дроби римскими цифрами тоже писали: с помощью значков отмечались унции – 1/12, половина отмечалась символом S, а все, что больше 6/12 – прибавлением: S = 10\12. Еще один вариант – S::.

Происхождение

На данный момент не существует единой теории происхождения римских цифр. Одна из самых популярных гипотез гласит, что этрусско-римские цифры произошли от системы счета, которая использует вместо цифры штрихи-зарубки.

Таким образом, цифра «I» - это не латинская или более древняя буква «и», а насечка, напоминающая форму этой буквы. Каждую пятую насечку обозначали скосом – V, а десятую перечеркивали – Х. Число 10 выглядело в этом счете следующим образом: IIIIΛIIIIX.

Именно благодаря такой записи цифр подряд мы обязаны особой системе сложения римских цифр: со временем запись числа 8 (IIIIΛIII) могла сократиться до ΛIII, что убедительно демонстрирует, каким образом римская система счета получила свою специфику. Постепенно зарубки превратились в графические символы I, V и X, и приобрели самостоятельность. Позже они стали идентифицироваться с римскими буквами – так как были на них внешне похожи.

Альтернативная теория принадлежит Альфреду Куперу, который предположил рассмотреть римскую систему счета с точки зрения физиологии. Купер считает, что I, II, III, IIII – это графическое представление количества пальцев правой руки, выкидываемых торговцем при назывании цены. V – это отставленный большой палец, образующий вместе с ладонью подобную букве V фигуру.

Именно поэтому римские цифры суммируют не только единицы, но и складывают их с пятерками – VI, VII и т.п. – это откинутый большой палец и другие выставленные пальцы руки. Число 10 выражали с помощью перекрещивания рук или пальцев, отсюда пошел символ X. Еще один вариант – цифру V попросту удвоили, получив X. Большие числа передавали с помощью левой ладони, которая считала десятки. Так постепенно знаки древнего пальцевого счета стали пиктограммами, которые затем начали отождествлять с буквами латинского алфавита.

Современное применение

Сегодня в России римские цифры нужны, в первую очередь, для записи номера века или тысячелетия. Римские цифры удобно ставить рядом с арабскими – если написать век римскими цифрами, а затем год – арабскими, то в глазах не будет рябить от обилия одинаковых знаков. Римские цифры имеют некоторый оттенок архаичности. С их помощью также традиционно обозначают порядковый номер монарха (Петр I), номер тома многотомного издания, иногда – главы книги. Также римские цифры используются в циферблатах часов под старину. Важные числа, такие, как год олимпиады или номер научного закона, могут также фиксироваться при помощи римских цифр: II мировая, V постулат Евклида.

В разных странах римские цифры употребляются немножко по-разному: в СССР было принято указывать с помощью них месяц года (1.XI.65). На западе римскими цифрами часто пишут номер года в титрах фильмов или на фасадах зданий.

В части Европы, в особенности в Литве, нередко можно встретить обозначение римскими цифрами дней недели (I – понедельник и так далее). В Голландии римскими цифрами иногда обозначают этажи. А в Италии ими отмечают 100-метровые отрезки пути, отмечая, в то же время, арабскими цифрами каждый километр.

В России при письме рукой принято подчеркивать римские числа снизу и сверху одновременно. Однако часто в других странах подчеркивание сверху значило увеличение регистра числа в 1000 раз (или 10000 раз при двойном подчеркивании).

Существует распространенное заблуждение о том, что современные западные размеры одежды имеют некую связь с римскими цифрами. На самом деле обозначения XXL, S, M, L и т.п. не имеют никакой связи с ними: это аббревиатуры английских слов eXtra (очень), Small (маленький), Large (большой).

Мы все пользуемся римскими цифрами – отмечаем ими номера веков или месяцев года. Римские цифры находятся на часовых циферблатах, в том числе на курантах Спасской башни. Мы их используем, но знаем про них не так много.

Как устроены римские цифры

Римская система счета в ее современном варианте состоит из следующих базовых знаков:

I 1
V 5
X 10
L 50
C 100
D 500
M 1000

Чтобы запомнить цифры, непривычные для нас, пользующихся арабской системой, существует несколько специальных мнемонических фраз на русском и английском языках:
Мы Dарим Сочные Lимоны, Хватит Vсем Iх
Mы Dаем Cоветы Lишь Xорошо Vоспитанным Iндивидуумам
I Value Xylophones Like Cows Dig Milk

Система расположения этих цифр друг относительно друга такова: числа до трех включительно образуются при помощи сложения единиц (II, III), - четырехкратное повторение любой цифры запрещено. Чтобы образовать числа больше трех, складываются или вычитаются большая и меньшая цифры, для вычета меньшая цифра ставится перед большей, для прибавления - после, (4 = IV), та же логика действует и с другими цифрами (90 = XC). Порядок расположения тысяч, сотен, десятков и единиц тот же, что и привычный нам.

Важно, что любая цифра не должна повторять больше трех раз, таким образом, самое длинное число до тысячи – 888 = DCCCLXXXVIII (500+100+100+100+50+10+10+10+5+1+1+1).

Альтернативные варианты

Запрет на четвертое использование одной и той же цифры подряд стал появляться только в XIX веке. Поэтому в старинных текстах можно увидеть варианты IIII и VIIII вместо IV и IX, и даже IIIII или XXXXXX вместо V и LX. Остатки этого написания можно увидеть на часах, где четыре часто отмечается именно с помощью четырех единиц. В старых книгах также нередки случаи двойных вычитаний – XIIX или IIXX вместо стандартных в наши дни XVIII.

Также в Средневековье появилась новая римская цифра – ноль, который обозначался буквой N (от латинского nulla, ноль). Большие числа отмечались специальными знаками: 1000 - ↀ (или C|Ɔ),5000 – ↁ(или |Ɔ),10000 – ↂ (или CC|ƆƆ). Миллионы получаются при двойном подчеркивании стандартных цифр. Дроби римскими цифрами тоже писали: с помощью значков отмечались унции – 1/12, половина отмечалась символом S, а все, что больше 6/12 – прибавлением: S = 10\12. Еще один вариант – S::.

Происхождение

На данный момент не существует единой теории происхождения римских цифр. Одна из самых популярных гипотез гласит, что этрусско-римские цифры произошли от системы счета, которая использует вместо цифры штрихи-зарубки.

Таким образом, цифра «I» - это не латинская или более древняя буква «и», а насечка, напоминающая форму этой буквы. Каждую пятую насечку обозначали скосом – V, а десятую перечеркивали – Х. Число 10 выглядело в этом счете следующим образом: IIIIΛIIIIX.

Именно благодаря такой записи цифр подряд мы обязаны особой системе сложения римских цифр: со временем запись числа 8 (IIIIΛIII) могла сократиться до ΛIII, что убедительно демонстрирует, каким образом римская система счета получила свою специфику. Постепенно зарубки превратились в графические символы I, V и X, и приобрели самостоятельность. Позже они стали идентифицироваться с римскими буквами – так как были на них внешне похожи.

Альтернативная теория принадлежит Альфреду Куперу, который предположил рассмотреть римскую систему счета с точки зрения физиологии. Купер считает, что I, II, III, IIII – это графическое представление количества пальцев правой руки, выкидываемых торговцем при назывании цены. V – это отставленный большой палец, образующий вместе с ладонью подобную букве V фигуру.

Именно поэтому римские цифры суммируют не только единицы, но и складывают их с пятерками – VI, VII и т.п. – это откинутый большой палец и другие выставленные пальцы руки. Число 10 выражали с помощью перекрещивания рук или пальцев, отсюда пошел символ X. Еще один вариант – цифру V попросту удвоили, получив X. Большие числа передавали с помощью левой ладони, которая считала десятки. Так постепенно знаки древнего пальцевого счета стали пиктограммами, которые затем начали отождествлять с буквами латинского алфавита.

Современное применение

Сегодня в России римские цифры нужны, в первую очередь, для записи номера века или тысячелетия. Римские цифры удобно ставить рядом с арабскими – если написать век римскими цифрами, а затем год – арабскими, то в глазах не будет рябить от обилия одинаковых знаков. Римские цифры имеют некоторый оттенок архаичности. С их помощью также традиционно обозначают порядковый номер монарха (Петр I), номер тома многотомного издания, иногда – главы книги. Также римские цифры используются в циферблатах часов под старину. Важные числа, такие, как год олимпиады или номер научного закона, могут также фиксироваться при помощи римских цифр: II мировая, V постулат Евклида.

В разных странах римские цифры употребляются немножко по-разному: в СССР было принято указывать с помощью них месяц года (1.XI.65). На западе римскими цифрами часто пишут номер года в титрах фильмов или на фасадах зданий.

В части Европы, в особенности в Литве, нередко можно встретить обозначение римскими цифрами дней недели (I – понедельник и так далее). В Голландии римскими цифрами иногда обозначают этажи. А в Италии ими отмечают 100-метровые отрезки пути, отмечая, в то же время, арабскими цифрами каждый километр.

В России при письме рукой принято подчеркивать римские числа снизу и сверху одновременно. Однако часто в других странах подчеркивание сверху значило увеличение регистра числа в 1000 раз (или 10000 раз при двойном подчеркивании).

Существует распространенное заблуждение о том, что современные западные размеры одежды имеют некую связь с римскими цифрами. На самом деле обозначения XXL, S, M, L и т.п. не имеют никакой связи с ними: это аббревиатуры английских слов eXtra (очень), Small (маленький), Large (большой).