Перестановка с повторением: предотвращение переполнения

Справочная информация:

Дано n мячей, таких что:

'a' balls are of colour GREEN
'b' balls are of colour BLUE
'c' balls are of colour RED
...

(конечно a + b + c + ... = n )

Число перестановок, в которых могут быть расположены эти шары, определяется следующим образом:

perm = n! / (a! b! c! ..)

Вопрос 1: Как я могу «элегантно» вычислить perm , чтобы избежать целочисленного переполнения как можно дольше , и быть уверенным, что когда я закончу вычисление, у меня либо будет правильное значение perm , или я знаю , что конечный результат будет переполнен?

В принципе, я хочу избежать использования чего-то вроде GNU GMP.

Необязательно, Вопрос 2: Является ли это действительно плохой идеей, и я должен просто пойти дальше и использовать GMP?

7
задан ArjunShankar 21 December 2011 в 14:45
поделиться