No olvides que en las ciencias informáticas cualquier problema casi siempere puede tener más de una resoluciones, de igual modo nosotros mostramos la mejor y más eficiente.
Solución:
El resultado desborda el int (y también std::uint64_t
)
Tienes que usar alguna biblioteca BigInt.
Como sugirió Jarod42, está perfectamente bien, pero no estoy seguro de si se producirá un desbordamiento o no.
Intente almacenar todos y cada uno de los dígitos del número en un array y después de eso multiplicar. Definitivamente obtendrás la respuesta correcta.
Para más detalles sobre cómo multiplicar usando array siga esta publicación http://discuss.codechef.com/questions/7349/computing-factorials-of-a-huge-number-in-cc-a-tutorial
ints solo tienen 32 bits. Cuando el resultado de una multiplicación es mayor que 2^31 – 1, el resultado se convierte en un valor negativo grande. En lugar de usar el tipo de datos int, use long long int, que contiene 64 bits.
Calificaciones y comentarios
Más adelante puedes encontrar las acotaciones de otros administradores, tú incluso puedes mostrar el tuyo si te gusta.