Кажется, вы можете представить положительные элементы в двоичном представлении целого числа и то же самое с отрицательными. Например: 2^4 – 2^2 + 2
становится 10010
(положительные элементы) и 00100
(отрицательные элементы). Затем вычтите отрицательное целое число из положительного целого числа (вы получите 01110
, переведенное обратно: 2^3 + 2^2 + 2
)
Конечно, вам нужно убедиться, что вы можете хранить все значения (например, если у вас есть компоненты 2 ^ 100, встроенный целочисленный тип не будет достаточным - вам понадобится как минимум 100-битное целое число (больше) если у вас отрицательные показатели, смотрите ниже)). На этом этапе вы можете свернуть свою собственную реализацию (или найти библиотеку BigInt).
Кроме того, вам нужно будет отслеживать, какой битовый индекс представляет какой показатель - в приведенном выше примере это тривиально, поскольку все показатели были неотрицательными, но вам нужно немного сместить отрицательные показатели (например, 2^4 – 2^3 + 2 – 2^-1 + 2^-2
переводится в 10010.01
(+) и 01000.10
(-) с точкой (.
), представляющей деление между неотрицательными и отрицательными показателями, в результате чего получается 01001.11
или 2^3 + 2^0 + 2^-1 + 2^-2
).