عیب بسیار بزگش اینه که هر رقم رو (که از 9 بیشتر نیست) در یک int ذخیره میکنه و خیلی فضا اشغال میکنه. در خالی که int به اندازه 32 بیت جا اشغال میکنه و میتونه از منفی 2 به توان 31 تا 2 به توان 31 رو ذخیره کنه(که خیلی عدد بزرگیه). بهتره از short int استفاده کنید که 16 بیت جا میگیره. اما بهتر از اون اینه که محاسبات رو در مبنای غیر 10 (و یک عدد خیلی بزرگ) انجام بدید و آخرش موقع چاپ به مبنای 10 تبدیل کنید. مثلا از نوع unsigned short int استفاده کنید که رنجش 0 تا 65535 هست. بعد محاسبات(برای بدست آوردن فاکتوریل) رو بجای مبنای 10 در مبنای 65536 حساب کنید و آخرش موقه چاپ به مبنای 10 تبدیل کنید (البته این ممکنه زمان کل محاسبه رو افزایش بده).
در ضمن اگه با ++C مینوشتید می‌تونستید بجای یک آرایهٔ معمولی از شیء vector استفاده کنید، البته زیاد در موردش اطلاع ندارم ولی فکر می‌کنم راحت‌تر و انعطاف‌پذیرتر بشه.