Римские цифры

Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от , проверенной 12 февраля 2021 года; проверки требуют .

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

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

Для правильной записи больших чисел римскими цифрами необходимо сначала записать число тысяч, затем сотен, затем десятков и, наконец, единиц.

В системе римских цифр отсутствует ноль, но ранее использовалось обозначение нуля как nulla (нет), nihil (ничто) и N (первая буква этих слов).

Пример: число 1988. Одна тысяча M, девять сотен CM, восемь десятков LXXX, восемь единиц VIII. Запишем их вместе: MCMLXXXVIII.

Меньшая цифра может быть записана и слева от большей, тогда её следует вычесть из большей. При этом вычитаться могут только цифры, обозначающие 1 или степени 10, а в качестве уменьшаемого выступать только ближайшие в числовом ряду к вычитаемой две цифры (то есть вычитаемое, умноженное на 5 или 10). Повторения меньшей цифры не допускаются. Таким образом, существует только шесть вариантов использования «правила вычитания»:

Например, число 94 будет XCIV = 100 − 10 + 5 − 1 = 94 — так называемое «правило вычитания» (появилось в эпоху поздней античности, а до этого римляне писали число 4 как IIII, а число 40 — как XXXX).

Необходимо отметить, что другие способы «вычитания» недопустимы; так, число 99 должно быть записано как XCIX, но не как IC. Однако, в наши дни в некоторых случаях используется и упрощенная запись римских чисел: например, в программе Microsoft Excel при преобразовании арабских цифр в римские при помощи функции «РИМСКОЕ()» можно использовать несколько видов представления чисел, от классического до сильно упрощённого (так, число 499 может быть записано как CDXCIX, LDVLIV, XDIX, VDIV или ID). Упрощение состоит в том, что для уменьшения какой-либо цифры слева от неё может писаться любая другая цифра:

Случаи такой записи чисел (как правило, годов) часто встречаются в титрах телесериалов США. Например, для года 1998: MIIM вместо MCMXCVIII.

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

Англосаксонская система марок углубления, используемая на корме клипера «Катти Сарк» (осадка — 6,7 метров)
Подобный формат в 1970-1980-х годах использовали в медицинских справках.

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

Для преобразования чисел, записанных арабскими цифрами в римские, используются специальные функции.

Для нецелых значений аргумента «число» производится округление вниз до целого; если после этого значение оказывается больше 3999 или меньше 0, то функция возвращает «#Знач»; для значения 0 возвращается пустая ячейка.

Функция преобразования арабского числа (в данном случае 1999) в римское на XPath
string-join( for $num in (1999) return ( ('','M','MM','MMM')[($num idiv 1000) mod 10+1], ('','C','CC','CCC','CD','D','DC','DCC','DCCC','CM')[($num idiv 100) mod 10+1], ('','X','XX','XXX','XL','L','LX','LXX','LXXX','XC')[($num idiv 10) mod 10+1], ('','I','II','III','IV','V','VI','VII','VIII','IX')[$num mod 10+1] ), '')
Функция преобразования арабского числа (в данном случае 1999) в римское на Perl
Класс для преобразования арабского числа (от 1 до 3999) в римское на Java
Extension class для преобразования римского числа в арабское и обратно, на CSharp
/// Класс предназначен для преобразований арабских чисел в римские и обратно/// <para>Класс изначально содержит алфавит римских чисел, способных определять арабские числа от 1 до 39999</para>/// <para>Если необходимо расширить диапазон, то можно определить дополнительные обозначения для римских чисел, используя/// поле <see cref="БазовыеРимскиеЧисла"/>БазовыеРимскиеЧисла</remarks>/// <para>Алфавит построен в виде словаря. Ключом словаря является арабское число (int), значением - соответствующее ему/// <para>Содержит римское обозначения арабских чисел 1*,4*,5*,9* - где "*"представляет собой 0...N нулей</para>/// <para>При создании содержит в себе обозначение чисел от 1 до 10000 (I...ↂ) Так как в римском числе один символ не может/// встречаться более трех раз, то изначально можно преобразовать в римский формат числа от 1 до 39999.</para> /// <para>Если Вы хотите иметь возможность работать с большим количеством римских чисел, то вы должны добавить в список /// дополнительные обозначения начиная с 40000 не пропуская элементы 1*,4*,5*,9*.</para>/// Рассчитывает максимально возможное римское число для текущего алфавита римских чисел./// <param name="числоАраб">Арабское число, которое необходимо преобразовать в римскую запись</param>/// <exception cref="ArgumentOutOfRangeException">Генерируется когда в качестве параметра передано число равное "0" //Исключаем знак "-" из арабского числа и делаем его первым символом римского числа"Недопустимое значение аргумента: римские числа не могут быть равными\"0\""//Раскладываем арабское число на составляющие его римские числа и объединяем их в одну строку/// <param name="числоРимское">Римское число, которое необходимо преобразовать в тип int</param>/// <exception cref="FormatException">Генерируется когда в качестве параметра передано число не являющееся римским</exception>/// <returns>Целое число, представляющее собой арабскую запись римского числа</returns>//Игнорировать регистр + соответствие должно начинаться с начала строки