In ogni caso hai un algoritmo quadratico mentre lo potresti fare lineare. Ok, è comunque pseudo-polinomiale, ma non è un buon motivo per tirarsi la zappa sui piedi!
Codice: Seleziona tutto
double ex(double x, int k) {
  double res = 1.0, fatt = 1.0, pow = 1.0;
  int i;
  for (i = 1; i <= prec; i++) {
    fatt *= i;
    pow *= x;
    res += pos / fratt;
  }
  return res;
}
Ovviamente non ho testato il codice.
Usando i double (tanto il risultato mica te lo trovi intero!) hai anche meno problemi di overflow, ma ci metto la mano sul fuoco che questo algoritmo è numericamente instabile.