Я знаю, как это сделать, и сделал программу, которая делает это в прошлом, однако она никогда не включала особые случаи римских цифр (например, IV = 4). Интеграция этого в функциональную программу минималистским образом - моя главная проблема. Есть ли хороший способ сделать это?C++: преобразование десятичной в римскую цифру
-2
A
ответ
1
очень простое решение, в псевдо-коде, может выглядеть примерно так:
value = get_the_value_to_convert();
divider = 1000; // Start at 1000 (M)
while (value > 0)
{
count = value/divider;
value = value % divider;
for (i = 0; i < count; ++i)
print(roman_numeral_from_number(divider));
divider /= 10;
}
roman_numeral_from_numbe
функция делает отображение взаимно-однозначное соответствие между номером и римской цифрой.
См., Например, 5432
как ввод будет печать MMMMMCCCCXXXII
.
Для получения лучших результатов разделите переменную divider
на 2
и 5
каждый второй раз.
Для получения лучших результатов добавьте чек для определенных номеров, например 90
, равный "XC"
.
Обратите внимание, что даже с изменениями вышеприведенный алгоритм не может обрабатывать очень большие числа, но, с другой стороны, Wikipedia утверждает, что исторически он использовался только для небольших чисел.
Если вы знаете [как читать их] (http://en.wikipedia.org/wiki/Roman_numerals#Reading_Roman_numerals), их также должно быть легко создать. Это просто деление, по модулю и в цикле строка, связывающая определенные строки с другой строкой. –
Ну да, но что такое пример? Я знаю, как читать им, просто трудно применить особые случаи. Я, вероятно, просто переусердствовал, но я просто хотел бы знать, что делать. Какова была ваша реализация, если я могу спросить @JoachimPileborg? – T145
Используя таблицу всех одно- и двухзначных цифр и их значений, вы можете искать от M (1000) до I (1) для первого значения> = значение, которое вы хотите преобразовать. Соедините эту строку с результатом и вычтите соответствующее значение. Повторение. – molbdnilo