Обходной путь Java для BigInteger - PullRequest
2 голосов
/ 07 января 2010

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 07 января 2010

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

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

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

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

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

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

2 голосов
/ 07 января 2010

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

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

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

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

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

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

...