Блог пользователя Snipx

Автор Snipx, 12 лет назад, По-русски

Всем привет!

Как многие знают, недавно прошел этап OpenCup, где была задача на подсчет числа N! (N<=40.000). Мы на джаве написали какое-то решение средней паршивости, использующее BigInteger, которое работало на макстесте около секунды. Однако с выводом мы уж совсем не успевали(там около 150кб ответ, из-за кривости рук на вывод тратилось порядка 5 секунд минимум).

В связи с этим встал небольшой вопрос, кто как умеет быстро выводить BigInteger в Java(если такие есть), желательно с примером кода, чтобы понять, каким классом и как именно вы выводите.

Да, я знаю правильное решение этой задачи без BigInteger, на этом можно не останавливаться.

Надеюсь информация будет полезна не только мне, спасибо всем за внимание и заранее спасибо за ваши ответы :)

  • Проголосовать: нравится
  • +7
  • Проголосовать: не нравится

»
12 лет назад, # |
  Проголосовать: нравится +7 Проголосовать: не нравится

Есть подозрение, что никак. Слишком долго происходит конвертация из внутреннего представления. Это весьма известная проблема BigInteger.

»
12 лет назад, # |
Rev. 2   Проголосовать: нравится +11 Проголосовать: не нравится

видел где-то код, где вывод осуществлялся чем-то наподобие разделяй и властвствуй: делим число на 10^(k/2), где k ~ log10(x) и выводим половинки рекурсивно, получался серьёзный прирост в скорости.