Вряд ли тебе нужно такое большое число. Полагаю, что это всего лишь промежуточный результат, и дальше ты будешь делить его на что-нибудь. Тогда можно представить факториал в виде произведения двух чисел. Например, перемножать отдельно чётные и нечётные множители. Так ты сможешь вычислять факторилы до (10^4932)^2, то есть до 10^9800. Главное потом в вычислениях сделать деление до умножения, чтобы не было переполнения.
Можно пойти более универсальным путём. Отдельно вычислять основание и отдельно степень результата.
То есть, во время вычислений ты сравниваешь текущее значение с sqrt(MAX_EXTENDED_NUMBER) и "скидываешь" степень в специальную переменную.
Пример:
a = b * c
if(abs(a) > 10^2400) { a = a/(10^2400); exp += 2400 }
В переменной a у нас результат вычислений, но его нужно будет в конце домножить на 10^exp. (В переменной exp у нас порядок результата).
з.ы. Поправил - второе сравнение не нужно.
з.з.ы. Ну и понятно, что 10^2400 и 2400 будут сидеть в константах, а не вычисляться каждый раз.