Обходной путь 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...