Возможно, это немного лишнее, однако с целью оптимизации вычисления одиночного факториала советую использовать рекурсивную функцию с хвостовой рекурсией (почитать можно здесь):
#include <iostream>
using namespace std;
int fac_times (int n, int acc) {
return (n==0) ? acc : fac_times(n - 1, acc * n);
}
int factorial (int n) {
return fac_times (n, 1);
}
cin.ignore()
между этими считываниями