римские цифры в арабские php
Как преобразовать целое число в римское число в PHP
Есть много вещей, о которых нужно подумать, когда вы пытаетесь преобразовать число в его римское представление, поэтому давайте подумаем об основах: меньшее число перед большим числом означает вычитание, а все остальное означает сложение. Например, IV означает 4, VI означает 6. Вы не должны ставить более одного меньшего числа перед большим числом, чтобы вычесть. Например, IIV не будет означать 3, поэтому вы должны разделить единицы, десятки, сотни и тысячи как отдельные элементы. Это означает, что 99 — это XCIX, 90 + 9, но никогда не должно записываться как IC. Аналогично, 999 не может быть IM, а 1999 не может быть MIM. Способ следовать этой логике в программировании (по крайней мере, в смысле числа к римскому) может быть легко понят, однако путь от римского числа к числовым значениям более сложен, поэтому объяснение здесь не будет упомянуто. статья (однако мы сделаем это с библиотекой).
В этой статье мы покажем вам, как преобразовать числовое значение в его римское представление и наоборот, если вы используете для него библиотеку.
А. Использование одной функции
Если вы не можете использовать библиотеку или просто хотите сохранить простоту, добавьте в свою коллекцию следующую функцию. Эта функция преобразует ваше число (первый аргумент) в его римское представление:
Заметка
Большинство алгоритмов работают только в диапазоне от 1 до 4999, поэтому при большом числе сценарий завершится ошибкой.
Просто включив эту функцию в свой проект, вы сможете использовать ее следующим образом:
И нам не нужно было включать библиотеку для такой функции.
Б. Использование библиотеки
Если вы хотите использовать библиотеку вместо написания своей собственной функции, мы рекомендуем вам использовать библиотеку римлян, очень простую библиотеку римских цифр PHP, которая позволяет преобразовывать целые числа в его римское представление и наоборот. Предпочтительным способом установки библиотеки является использование composer, поэтому вы можете запустить следующую команду
После установки библиотеки вы сможете использовать ее пространство имен и использовать функции, которые помогут вам преобразовать числа. Для получения дополнительной информации об этой библиотеке, пожалуйста, посетите официальный репозиторий на Github здесь.
Номер римскому
Чтобы преобразовать целое число в его римское представление, используйте IntToRoman класс, создайте экземпляр и вызовите метод фильтра из него. Этот метод ожидает в качестве первого аргумента число и возвращает строку с римским номером:
Роман на номер
Чтобы преобразовать римское число в его числовое представление, используйте RomanToInt класс, создайте экземпляр и вызовите метод фильтра из него. Этот метод ожидает в качестве первого аргумента строку с римским номером и возвращает целое число с числовым значением:
Преобразование между римскими и арабскими цифрами на Яве
Узнайте, как конвертировать между римскими и арабскими цифрами с помощью Java
1. Введение
Древние римляне разработали свою собственную числовую систему, называемую римскими цифрами. Система использует буквы с различными значениями для представления чисел. Римские цифры до сих пор используются в некоторых незначительных приложениях.
В этом учебнике мы будем реализовывать простые преобразователи, которые преобразуют числа из одной системы в другую.
2. Римские цифры
В римской системе у нас есть 7 символов, представляющих :
Первоначально, люди использовали для представления 4 с IIII или 40 с XXXX. Это может быть довольно неудобно читать. Также легко принять четыре символа рядом друг с другом за три символа.
Римские цифры используют вычитанную нотацию чтобы избежать таких ошибок. Вместо того, чтобы четыре раза по одному (IIII), можно сказать, что это один менее пяти (IV).
Как это важно с нашей точки зрения? Это важно, потому что вместо того, чтобы просто добавлять символ чисел по символу, нам может понадобиться проверить следующий символ, чтобы определить, следует ли добавлять или вычитать это число.
3. Модель
Давайте определим enum для представления римских цифр:
Этот метод позволит нам явно получить определенные римские цифры в порядке нисходящего значения.
4. От римского до арабского
4.1. Осуществление
Далее мы можем реализовать алгоритм в Java:
4.2. Тест
Наконец, мы можем протестировать реализацию:
5. От арабского до римского
Мы можем использовать следующий алгоритм для преобразования с арабского на римские цифры (итерируя через символы в обратном порядке М Я ):
5.1. Осуществление
Далее мы можем реализовать алгоритм:
5.2. Тест
Наконец, мы можем протестировать реализацию:
6. Заключение
В этой быстрой статье мы показали, как конвертировать между римскими и арабскими цифрами.
Мы использовали enum представлять набор римских цифр, и мы создали класс полезности для выполнения конверсий.
Из Басры в Рим. Преобразовываем арабские числа в римские
Доброе время суток, Хабраюзер.
Разрабатывая в основном для платформы J2ME, я всегда старался вносить какие то изюминки в свои проекты. Так, однажды, мне понадобилось выделить пункты меню.
Стандартное решение, через тире или пронумеровав их, использовать не очень хотелось, но другие варианты тогда у меня отсутствовали. Обдумывая как бы лучше оформить эти пункты, я случайно наткнулся на свою старую школьную тетрадку по истории, в которой пункты были пронумерованы с использованием римских цифр. Бинго!
Стоит признаться, на то время моих познаний в римских цифрах хватало только для подсчета до второго-третьего десятка. Что вообще то для нумерации пунктов должно было хватить. Но как любой программист, захотелось иметь готовое решение, которое смогло бы переводить любые целые десятичные арабские числа в эквивалентные им римские.
В Википедии нашлась статья с описанием Римской СС, и вскоре я набросал алгоритм перевода из арабских чисел в римские.
I — 1
V — 5
X — 10
L — 50
C — 100
D — 500
M — 1000
Ноль отсутствует вообще, поэтому будем использовать пустое значение.
Итак, сам алгоритм достаточно прост:
1. Выделяем (если есть) количество целых тысяч. Полученное значение позволить сгенерировать строку с n количеством «M» (читаем, n*1000).
Пример: 2012 после первого пункта даст «MM»
2. Получаем остаток после деления на 1000, чтобы выделить в дальнейшем следующие значения.
3. Выделяем (если возможно), целые 500. При этом учитываем что если полученное значение равно 4 (5+4=9), то следует записывать как значение 1000-100, что в римский СС равнозначно «CM».
Пример: 1887 после этого пункта даст нам «MD».
1945 соответственно «MCM».
4. Получаем остаток от деления на 500.
5. Делим на 100 чтобы выделить целые сотни и складываем к предыдущему результату. Учитываем что если получили 4, что равнозначно 400, то записываем как 500-100, то есть «CD».
Пример: 1709 даст после этого шага «MDCCC».
6. Получаем остаток от деления на 100.
7. Выделяем из него целые пол сотни. Если значение будет равно 4 (то есть 90), то записываем как 100-10, что равно «XC». Иначе прибавляем к строке «L»
Пример: 1986 после всего выдаст нам «MCML».
8. Выделяем остаток от 50.
9. Выделяем целое количество десятков и складываем к строке n раз символ «X». При этом учитываем что 40 пишется как 50-10, то есть «XL».
Пример: 1986 после всего выдаст нам «MCMLXXX».
10. Получаем остаток от деления на 10. Этот шаг отличается от других тем, что можно сразу приравнять остаток к его эквиваленту. 1=I, 7=VII и так далее.
После перебора числа этим алгоритмом мы получаем примерно такое:
2012 == MMXII
Ниже исходник на Java, реализующий алгоритм.
0b1001 путей решения задачи перевода чисел в римскую запись
Привет друзья. Вот вам простенькая задачка. Как бы вы перевели арабские числа в римские используя Python? Правда с одним условием — числа не могут быть больше чем 4000.
Я думаю это должно быть просто, но позвольте я вам покажу вам серию интересных решений и не тривиальных подходов:
«13 шагов» от StefanPochmann
Очень простая идея и при этом самая популярная. Мы делаем таблицу соответствий арабских и римских чисел. Идя по таблице этих соответствий мы уменьшая арабское число и увеличиваем римское.
Я добавил функцию print для вас, чтобы решение было понятнее. И вот какой будет вывод:
Теперь вы видите, как на каждой итерации меняется римское и арабское числа.
«thous, hunds, tens и ones» от mdeakyne
В этом случае у нас уже есть обратное соответствие арабских к римским. При этом нам уже не нужен цикл.
«base.replace» от MaikSchoepe
Я верю, что это не самый эффективный способ решения, но один из самых веселых. Он начинается с того, что делает длинную строку из “I”, размером с переданное число. Следующей строй заменяет каждые пять символов “I” на символ “V”. Далее два “V” на “X” и так далее. В конце пути мы получим строку, которую мы искали.
«Enum» от veky
Для того, чтобы понять, как работает следующее решение вам надо знать модуль Enum. Если не знаете — есть отличный шанс погуглить его.
В целом пример работает так-же как мы видели в первом примере от StefanPochmann, но кое-каким синтаксическим сахором. Таким как Enum и yield
«A derelict battery» от veky
Все эти решения я собрал с CheckiO.
И когда пользователь публикует свое решение на этом ресурсе — он должен выбрать, в какую категорию он хочет его добавить. Есть такая категория как “Creative”, где тебе не надо сильно заморачиваться на тему скорости или как легко твое решение читается. Единственная вещь, о который ты должен думать — это на сколько креативное и необычное твое решение.
Это решение как раз из такое категории.
Да, вот и все. Стоит упомянуть, правда, что модуль formater задеприкейтили начиная с версии 3.4 из-за того, что мало кто его использовал. Так что мы скорее всего напишем петицию Гвидо, чтобы оставить этот модуль в Python. Своим ап-вотом за это решение — вы как-бы ставите свою подпись под этой петицией.
«Достаточно элегантно, но не очень по питоновски» от nathan.l.cook
Мы идем дальше и решения становятся тяжелее
Знаете, когда читаешь чье то решение и первые строки, которые ты видишь это:
Ты думаешь: “Ок, тут ща точно будет какая-то магия”
«Немного истории от» от veky (или от …)
Вы можете знать автора этого решения по таким книгам как The Art of Computer Programming, Concrete Mathematics, Surreal Numbers и так далее.
«Эта странная римская математика» от LukeSolo
Довольно часто ты встречаешь решения на CheckiO, и при этом ты даже не представляешь, как они работают:
Но я думаю, что вы разберетесь 🙂
Спасибо
В списке используемых материалов я добавил ссылки на решения CheckiO пользователей, которые использовал в этой статье. Перейдя по ним, вы можете прочитать код-ревью других пользователей либо написать свое.
Это первый раз, когда я пытаюсь поделится такой вот коллекцией наиболее интересных решений на CheckiO. Дайте мне знать, насколько интересно вам о таком читать и на сколько вам нравится сам формат.
Для создания этой статьи использовались решения пользователей CheckiO:
Римские цифры: от 1 до 50. Как перевести арабское число в римское и обратно
Доброго времени суток!
Вообще, обычно, в повседневной жизни мы используем арабские цифры (1, 2, 3 и т.д.). Они удобны, практичны, и уже давно как-то прижились 👀.
Но в определенных ситуациях, например, при обозначении веков, составлении каких-то документов, написании поэм или рассказов могут понадобиться римские цифры (I, II, III и т.д.).
Кстати, они имеют несколько интересных особенностей:
В этой заметке приведу несколько таблиц, которые помогут вам сориентироваться в этом не очень привычном исчислении.
Римские цифры
От 1 до 50
Арабские | Римские |
1 | I |
2 | II |
3 | III |
4 | IV |
5 | V |
6 | VI |
7 | VII |
8 | VIII |
9 | IX |
10 | X |
11 | XI |
12 | XII |
13 | XIII |
14 | XIV |
15 | XV |
16 | XVI |
17 | XVII |
18 | XVIII |
19 | XIX |
20 | XX |
21 | XXI |
22 | XXII |
23 | XXIII |
24 | XXIV |
25 | XXV |
26 | XXVI |
27 | XXVII |
28 | XXVIII |
29 | XXIX |
30 | XXX |
31 | XXXI |
32 | XXXII |
33 | XXXIII |
34 | XXXIV |
35 | XXXV |
36 | XXXVI |
37 | XXXVII |
38 | XXXVIII |
39 | XXXIX |
40 | XL |
41 | XLI |
42 | XLII |
43 | XLIII |
44 | XLIV |
45 | XLV |
46 | XLVI |
47 | XLVII |
48 | XLVIII |
49 | XLIX |
50 | L |
От 10 до 100, от 100 до 3000
Арабские | Римские |
10 | X |
20 | XX |
30 | XXX |
40 | XL |
50 | L |
60 | LX |
70 | LXX |
80 | LXXX |
90 | XC |
100 | C |
Арабские | Римские |
50 | L |
100 | C |
150 | CL |
200 | CC |
250 | CCL |
300 | CCC |
350 | CCCL |
400 | CD |
450 | CDL |
500 | D |
550 | DL |
600 | DC |
650 | DCL |
700 | DCC |
750 | DCCL |
800 | DCCC |
850 | DCCCL |
900 | CM |
950 | CML |
1000 | M |
Арабские | Римские |
100 | C |
200 | CC |
300 | CCC |
400 | CD |
500 | D |
600 | DC |
700 | DCC |
800 | DCCC |
900 | CM |
1000 | M |
1100 | MC |
1200 | MCC |
1300 | MCCC |
1400 | MCD |
1500 | MD |
1600 | MDC |
1700 | MDCC |
1800 | MDCCC |
1900 | MCM |
2000 | MM |
2100 | MMC |
2200 | MMCC |
2300 | MMCCC |
2400 | MMCD |
2500 | MMD |
2600 | MMDC |
2700 | MMDCC |
2800 | MMDCCC |
2900 | MMCM |
3000 | MMM |
Перевод арабского числа в римское (и наоборот)
Разумеется вручную переводить (считая тысячи, сотни, и десятки) арабские числа в римские — занятие то еще 👀 (и вряд ли кто-то этим занимается, кроме может быть каких-нибудь математиков или историков).
Поэтому для этих целей гораздо удобнее пользоваться программами, которые могут за вас все посчитать и конвертировать. Благо, что для расчетов ничего сложнее, чем Excel или Word ненужно (да и их если нет — можно воспользоваться аналогами, в том числе и онлайн-версиями).
Способ 1 (Excel)
1) Если у вас нет Excel — можно установить его бесплатный аналог (например, Libre Office) — https://ocomp.info/chem-zamenit-word-i-excel.html#LibreOffice
2) Кроме этого, можно воспользоваться Яндекс-диском: в его арсенале так же есть онлайн-версия Excel.
Яндекс-диск — создать таблицу
И так, будем считать, что Excel (или его аналог) у вас есть, и программа запущена — перед вами большой лист в клеточку. Теперь выберите первую ячейку A1, и в верхнюю строку с формулой напишите:
где 355 — число, которое вам нужно конвертировать в римское.
После нажмите Enter. Программа автоматически покажет вам в ячейке A1 римское число (см. пример на скрине ниже). Теперь можно скопировать его и вставить в любой другой документ/текст.
Libre Office (или Excel) — формула перевода в римское число
Если вам в последствии понадобиться другое число — просто поменяйте его в формуле (в скобках) и Excel тут же покажет вам новый результат.
Для обратного перевода используется другая формула:
где LXXX — римское число. Обратите внимание на кавычки — они обязательны, т.к. римские числа задаются текстом.
Формула перевода римского числа в арабское
Способ 2 (Word)
Я покажу свой пример на версии Office 2019 (в принципе, аналогично будет выполняться и в других современных версиях 2016, 2013).
Word — формат номеров страниц / Кликабельно
Далее укажите формат страниц в виде арабских чисел «1, 2, 3. » и выберите нумерацию страниц с того числа, которое вам нужно перевести в римское. В моем примере 3569.
После чего просто выберите новый формат нумерации «I, II, III» и ву-а-ля — арабское число преобразуется в римское. Осталось только скопировать его и вставить в нужный вам текст.
Способ актуален даже для достаточно больших чисел.
Меняем формат и готово!
Способ 3 (Word)
В Word есть еще один способ, как можно быстро перевести число в римское: