Для этой конкретной проблемы GMP действительно является излишним.
На самом деле, даже структура, представленная Карлом Норумом, хотя и полезна и носит более общий характер, содержит больше, чем вам потребуется.В частности, поскольку все факториалы являются натуральными числами, вам не нужно беспокоиться о знаке.
Кроме того, нет необходимости реализовывать сложение, вычитание или даже общее умножение.Вам нужно только побеспокоиться о умножении одного из этих "bignums" на целое число, что не так уж сложно.
Вот заглушка для операции умножения
void multiply( mybignum bn, int factor ) {
// for each of the digits in 'bn'
// multiplies 'factor' by the particular digit
// adds the previous remainder and stores
// the new carry value
}