Блок задач

4. Задачи со звездочкой

Темы
Сложность 5

Задача «Римская система счисления»

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

int roman_to_decimal(char *str_roman)
{
    /* переводит из римской в десятичную и возвращает результат */
}

int decimal_to_roman(int number, char *string, int maxlen) 
{
    /*
     * number - исходное число
     * string - строка, куда сохранять результат
     * maxlen - количество байт, доступных в строке
     *
     * Если результат не помещается в строку, функция записывает 
     * максимально возможное количество символов, завершая их 
     * нулевым символом, и возвращает 1. 
     * Если результат помещается, функция возвращает 0.
     */

    /* ... */
}

Примечание. Работа функций должна быть протестирована с помощью макроса assert.

Значения букв в римской системе:

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

Правила записи:

  1. Каждый меньший знак, поставленный слева от большего, вычитается из него.

  2. Каждый меньший знак, поставленный справа от большего, прибавляется к нему. Это правило обычно применяется только во избежание четырёхкратного повторения одной и той же цифры.