Я пытаюсь решить следующую задачу с палиндромом из Sphere Online Judge (SPOJ), где мне нужно найти палиндром для целого числа длиной до миллиона цифр. Я думал об использовании функций Java для обращения строк вспять, но позволят ли они сделать строку такой длины?
Переведено автоматически
Ответ 1
Вы должны быть в состоянии получить строку такой длины
Integer.MAX_VALUE всегда 2,147,483,647 (231 - 1) (Определяется спецификацией Java, максимальный размер массива, который класс String использует для внутреннего хранения) ИЛИ
Half your maximum heap size (поскольку каждый символ равен двум байтам), в зависимости от того, что меньше.
Ответ 2
Я полагаю, что они могут содержать до 2 ^ 31-1 символов, поскольку они хранятся во внутреннем массиве, а массивы в Java индексируются целыми числами.
Ответ 3
Хотя теоретически вы можете использовать целое число.Символы MAX_VALUE, JVM ограничена размером массива, который она может использовать.
len: 2147483647 java.lang.OutOfMemoryError: Requested array size exceeds VM limit len: 2147483646 java.lang.OutOfMemoryError: Requested array size exceeds VM limit len: 2147483645 OK len: 2147483644 OK
Примечание: в Java 9 строки будут использовать byte[], что будет означать, что многобайтовые символы будут использовать более одного байта и еще больше уменьшат максимальное значение. Если у вас есть все четыре точки байтового кода, например, смайлики, вы получите всего около 500 миллионов символов
Ответ 4
Рассматривали ли вы возможность использования BigDecimal вместо String для хранения ваших чисел?