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 и т.д.), а быстрое деление на одну римскую цифру можно реализовать отдельно.
Натуральную степень - через логарифм умножений.
И т.д.