Не работает программа вычисления факториала. Что делать?
#include <iostream>
using namespace std;
int main() {
long int a;
cin >> a;
long int f = 1;
for (long int i = 1; i <= a; ++i) {
f *= i;
}
cout << f << endl;
}
При вычислении факториала чисел больших 12, происходит сбой и умножение идет не на число. В чем проблема? Из-за типа данных?
Возможно, это немного лишнее, однако с целью оптимизации вычисления одиночного факториала советую использовать рекурсивную функцию с хвостовой рекурсией (почитать можно здесь):
#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);
}