Как перевести с десятичной системы счисления в римскую?

92
17 марта 2022, 12:10

Подскажите пожалуйста, с чего начать что б перевести с десятичной системы счисления в римскую и обратно?

Вот собствено 2 метода для примера

public static String decimal2Roman(int x) { ... }
public static int roman2Decimal(String s) { ... }
Answer 1

У вас две отдельных задачи. Для решения обоих вам следует ознакомится с Римской системой счисления.

Первая с переводом с десятичной системы - это задача на применения оператора деления с остатком (%). Алгоритм действий примерно следующий:

  1. Смотрим разрядность числа. (Допустим число на входе программы 23, тор разрядность такого числа 2)
  2. Берем минимальный делитель для числа с разрядностью из пункта 1. (Смотрим таблицу римских цифр, для разрядности 2, у нас есть два римским числа X - 10,L - 50. Берем меньшее 10)
  3. Делим входное число нацело 23 / 10 = 2
  4. Записываем результат вычисления как Римское число в строку(2 раза по X, получится XX)
  5. Делим входное число с остатком 23 % 2 = 3
  6. Если разрядность результата деления с остатком больше 2 переходим в пункт 1, иначе в пункт 7
  7. Берем остаток от деления и находим ему соответствие в Римской системе счисления 3 -> III 8 Добавляем результат вычисления как Римское число в конец строки (XX + III = XXIII) .

Вторая задача более интересная - это задача парсинга строки. Вам нужно будет находить соответствующим символам из строки соответствие в десятичной системе. т.к. в римской системе счисления нельзя писать более 3 одинаковых символов подряд(IV а не IIII, XL а не XXXX), то вам придется находить соответствие не одному символу а сразу двум.

В результате у вас получиться массив символов, например для римского числа XXXIV, у вас должен получится массив [10,10,10,4]. Суммируя элементы массива вы найдете нужное вам число, в примере это будет 34.

Для проверки можете использовать калькулятор онлайн.

Answer 2

Большинство задач уже были решены до тебя. Если ты не учишься, то, обычно, не стоит переизобретать велосипед. Вот ссылки на решения с тестами (прошу прощение за столь короткий ответ):

  1. Из римских в арабские
  2. Из арабских в римские

PS: на сайте с указанными ссылками есть тысячи других решенных относительно несложных задач для большиства языков программирования.

READ ALSO
Добавление Activity парсера HTML во Fragment

Добавление Activity парсера HTML во Fragment

Суть вопроса такая: у меня есть написанный парсер HTML в отдельном проекте, теперь я хочу впихнуть activity этого парсера во fragment 2 (вторая вкладка...

252
Как запустить анимацию перехода между активити с общим элементом после создания второй активити

Как запустить анимацию перехода между активити с общим элементом после создания второй активити

Есть задача, при переходе с одной актвити на другую, "перемещается" общий элемент (ImageView), во второй активити есть RecyclerView куда эта картинка...

71
Как правильно вывести сообщение, что ресурс занят и поток будет ждать освобождения ресурса?

Как правильно вывести сообщение, что ресурс занят и поток будет ждать освобождения ресурса?

Пусть есть разделяемый ресурс в программе "res"Пусть есть два потока, которые хотят зайти в критическую секцию:

285