Для числовой строки без знака n длины L , содержащей цифры b , решение "ручка и бумага":
n dec = n 0 xb L-1 + n 1 xb L-2 + ... + n L-1 xb 0
(где n 0 является самой значимой, т. Е. Левой цифрой, а n L-1 самой младшей цифрой, т. Е. Индексы совпадают с порядком массива C).
Таким образом, разбивая его на операции, вы должны реализовать произвольную длину целого числа операций для:
- Вычисление (x y )
- Умножение
- Сложение
Поскольку в самом грубом (и я предлагаю вам начать с него) умножение может быть выполнено путем повторного сложения и возведения в степень путем повторного умножения, вам нужно толькореализовать сложение . Улучшения производительности, такие как длинное умножение и возведение в квадрат в квадрате , могут подождать, пока у вас не появятся основные принципы (и установлено, что простое решение даже слишком медленное). «ручное и бумажное» решение относительно сложения относительно простое (для A + B итерация цифр от n = от LSD до MSD + 1 при выполнении A n + B n + Carry n-1 ) и может быть реализован в коде для строк произвольной длины.
Исходя из этого, реализовать умножение на повторноедобавление (изначально), в свою очередь возведение в степень путем повторного умножения.
Затем, наконец, реализовать выражение с десятичным числом n dec = ... как указано выше с итерацией от n 0 до n L-1 с использованием произвольной длиныцелое число операций.
Проверьте несколько коротких тестовых строк, а затем, при необходимости, оптимизируйте с помощью более сложных методов умножения и возведения в степень, проверяя эти улучшения по сравнению с оригинальными проверочными данными.