Другой способ - сохранить в двумерном массиве римские цифры для 1, 5, 10, 50, 100, 500, 1000 и т. Д. Пример (в массиве PHP):
$roman = array(
[0] = array( 1=>"I", 5=>"V", 10=>"X" ),
[1] = array( 1=>"X", 5=>"L", 10=>"C" ),
[2] = array( 1=>"C", 5=>"D", 10=>"M" ),
[3] = array( 1=>"M", 5=>"^V", 10=>"^X" ),
);
Затем возьмите каждую цифру справа налево и примените следующий перевод. Установите переменную $ level = 0 и увеличивайте ее значение на 1 после каждой обработанной цифры:
1 => $roman[$level][1]
2 => $roman[$level][1].$roman[$level][1]
3 => $roman[$level][1].$roman[$level][1].$roman[$level][1]
4 => $roman[$level][1].$roman[$level][5]
5 => $roman[$level][5]
6 => $roman[$level][5].$roman[$level][1]
7 => $roman[$level][5].$roman[$level][1].$roman[$level][1]
8 => $roman[$level][5].$roman[$level][1].$roman[$level][1].$roman[$level][1]
9 => $roman[$level][1].$roman[$level][10]
(в PHP '.' Объединяет две строки)
Пример: 1945
5 => $roman[0][5] = "V"
4 => $roman[1][1].$roman[1][5] = "XL"
9 => $roman[2][1].$roman[2][10] = "CM"
1 => $roman[3][1] = "M"
Таким образом, переведенное число "MCMXLV"
Извините, это может не полностью ответить на ваш вопрос, но я надеюсь, что это поможет в любом случае ..