Я хочу вычислить факториалы для нескольких чисел и вернуть результаты в виде массива. Вот моя программа:
#include <stdio.h>
#include <stdlib.h>
int *fact(int arr[], int n) {
int *facts, fac = 1, i, j;
facts = (int *) malloc(n * sizeof(int));
for (i = 0; i < n; i++) {
for (j = 1; j <= *(arr + i); j++)
fac = fac * j;
*(facts + i) = fac;
}
return facts;
}
int main(void) {
int *num, *facto, n, i; //Initializing variables.
printf("How many numbers to calculate factorial for :\t");
scanf("%d", &n);
num = (int*) malloc(n * sizeof(int)); //Dynamic allocation for array num.
printf("Enter the elements separated by spaces :\t");
for (i = 0; i < n; i++)
scanf("%d", num + i);
facto = fact(num, n);
printf("\nFactorials are :\t");
for (i = 0; i < n; i++)
printf("%d\t", *(facto + i));
printf("\n");
return 0;
}
Однако при печати элементов возвращаемого массива верным является только первое значение. Остальные кажутся случайными.
Что не так с этой программой, и как я могу это исправить?