AInitak дал правильный ответ, но я хочу добавить, что одним способом вы можете найти ошибка в вашем коде - вывести значения i
и x
в цикле факториала.
int factorial(int x) {
int i;
for(i=1; i<x; i++)
{
x *= i;
printf("%d, %d\n", i, x);
}
return x;
}
Это дает вам вывод
1, 3
2, 6
3, 18
4, 72
5, 360
6, 2160
7, 15120
8, 120960
9, 1088640
10, 10886400
11, 119750400
12, 1437004800
13, 1501193216
14, -458131456
-458131456
Это облегчает понимание того, что происходит не так. Цикл не останавливается там, где вы ожидаете, по причинам, объясненным AInitak.