Обходной путь Java для BigInteger

Я работал над сценарием, в котором мне нужно было реализовать BODMAS на Java, а операнды могли иметь до 1000 цифр. Поэтому я решил реализовать его следующим образом - я преобразовал выражение infix (выражение, для которого должен быть реализован BODMAS) в postfix, а затем я оценил выражение postfix, проанализировав все имеющиеся у него BigInteger. Я был успешным в этой реализации.

Теперь я узнаю, что я не могу использовать BigInteger и должен обходиться с основными типами данных, такими как int, string и т. Д.

Я думал о том, как это можно сделать и, честно говоря, не добился какого-либо значительного прогресса.

Любая помощь или предложения о том, как BigInteger может быть реализован с использованием основных типов данных, будут очень полезны.

2 ответа

Простой способ реализации больших целых чисел - хранить их как массив десятичных цифр, например. 1234 может быть представлен:

int[] bignum = new int[] {1, 2, 3, 4};

Вам нужно будет реализовать сложение, вычитание, умножение, деление и все остальное, что вам нужно.

Вы можете обнаружить, что хранить числа в обратном порядке проще, поэтому храните 1234 как:

int[] bignum = new int[] {4, 3, 2, 1};

Более продвинутая реализация будет использовать базу 2^32 или нечто большее, чем база 10.

Вот бесплатная реализация BigInteger от Open JDK. Это покрыто GPL2 (это проблема?)

И даже если вы не можете скопировать и вставить его, вы можете узнать, как биты хранятся и обрабатываются в массиве int[].

Альтернативой может быть библиотека кольтов из CERN. По крайней мере, он может обрабатывать гигантские битовые поля.

редактировать

После выяснения значения BODMAS (подумал, что это был алгоритм шифрования или что-то еще, и его нужно было сделать на специальном и ограниченном JDK;-))), я думаю, что совет жеребенка не подходит;)

Я не удаляю этот ответ, хотя теперь я думаю, что у p1NG нет "законных" ограничений против использования (или переопределения) BigInteger...

Другие вопросы по тегам