Antecedentes:Permutación con Repetición: desbordamiento Evitar
Dada n
bolas tal que:
'a' balls are of colour GREEN
'b' balls are of colour BLUE
'c' balls are of colour RED
...
(por supuesto a + b + c + ... = n
)
se le da el número de permutaciones en el que estas bolas se pueden organizar por:
perm = n!/(a! b! c! ..)
Pregunta 1: Como puedo 'elegante' calcular perm
a fin de evitar un desbordamiento de enteros como el mayor tiempo posible, y estar seguros de que cuando haya terminado el cálculo, yo tampoco tengo el valor correcto de perm
, o yo sé que la el resultado final se desbordará?
Básicamente, quiero evitar usar algo como GNU GMP.
Opcionalmente, Pregunta 2: ¿Es esta una mala idea realmente, y debería seguir adelante y usar GMP?
¿Por qué quieres evitar GMP? En general, desea hacer el menor trabajo posible. – Dave
Detectar desbordamiento es en realidad uno de los puntos débiles de C. Supongamos que logra evitar el desbordamiento el mayor tiempo posible, y por lo tanto puede estar seguro de que tendrá el valor correcto si-y-solo-si fue posible calcularlo sin desbordamiento. Incluso entonces, aún no sabrás si realmente ocurrió un desbordamiento. – ruakh
@Dave: tienes razón. Pero el problema es interesante, sin embargo. Entonces, la pregunta queda para aquellos que se preocupan por el "cómo" más que por el "por qué" :). Tal vez alguien termine usándolo en un 8051 en un tostador interactivo: P – ArjunShankar