Your calculation fails even in 64-bit, because you shoot in the foot with cast (it hurts):
c = (int) factorial(i) / (factorial(r) * factorial((i - r)));
analyzed as
c = ((int)factorial(i)) / (factorial(r) * factorial((i - r)));
:
c = (int)(factorial(i) / (factorial(r) * factorial(i - r)));
, factorial , :
int64_t factorial(int n) {
int64_t x;
for (x = 1; n > 1; n--) {
x *= n;
}
return x;
}
, , 29 :
#include <stdio.h>
#include <stdlib.h>
long long binomial(int n, int p) {
int q;
long long x;
if (p < n - p)
p = n - p;
q = n - p;
for (x = 1; n > p; n--)
x *= n;
for (; q > 1; q--)
x /= q;
return x;
}
int main(int argc, char **argv)
{
int n, r, i;
if (argc < 2) {
printf("[function]: %s [number of lines to print]", argv[0]);
return -1;
}
n = atoi(argv[1]);
for (i = 0; i <= n; i++) {
for (r = 0; r <= i; r++) {
printf("%lld ", binomial(i, r));
}
printf("\n");
}
return 0;
}
, , , , , :
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
int n, r, i;
if (argc < 2) {
printf("[function]: %s [number of lines to print]", argv[0]);
return -1;
}
n = atoi(argv[1]);
long long coeff[n + 1];
coeff[0] = 1;
for (r = 1; r <= n; r++) {
coeff[r] = 0;
}
for (i = 0; i <= n; i++) {
for (r = i; r > 0; r--) {
coeff[r] += coeff[r - 1];
}
for (r = 0; r <= i; r++) {
printf("%lld ", coeff[r]);
}
printf("\n");
}
return 0;
}