C#

C# как складывать римские цифры?

1) Перевести в десятичную систему и использовать стандартные операции.

2) Построить арифметику в римских цифрах.
Принцип примерно такой:
Нормализуем операнды, убирая префиксы (например, IX становится VIIII). При сложении суммируем все цифры, записывая их по убыванию веса, затем заменяем "лишние" группы по 2 и по 5 символов, затем переводим в префиксную форму.
 IX + VIII = VIIII + VIII = VVIIIIIII = XVII
(VV = X, IIIII = V)
При вычитании убираем одинаковые цифры:
 IX - VIII = VIIII - VIII = I 
Умножение на 2 - это сложение операнда с самим собой.
Деление на 2 - по таблице:
 L / II = XXV
X / II = V
V / II = II (остаток I)
Умножение общего вида реализуем через логарифм сложений (один операнд умножаем на 2, другой - делим на 2, где остаток 1 - там дополнительное сложение).
Деление общего вида - обычный экспоненциальный алгоритм с повторяющимися умножениями и вычитаниями. Перед этим можно сократить делимое и делитель на общий множитель в римских цифрах (например, легко определить делимость на 2, на 5, на 10, на 50 и т.д.), а быстрое деление на одну римскую цифру можно реализовать отдельно.
Натуральную степень - через логарифм умножений.
И т.д.
Дима Харин
Дима Харин
87 571
Лучший ответ
не предусмотрено
СТ
Станислав Тё
89 716
Зачем? Это непозиционная система счисления, компьютер умеет только переводить римские числа в десятичную систему и проводить операции уже над нормальными числами
MR
Michael Rebel
5 840