34 lines
640 B
Text
34 lines
640 B
Text
int factorial(int n) {
|
|
if (n < 1) return 1;
|
|
|
|
int product = 1;
|
|
for (int i = 2; i <= n; ++i) {
|
|
product = product * i;
|
|
}
|
|
|
|
return product;
|
|
}
|
|
|
|
int binomial(int n, int k) {
|
|
// Special cases
|
|
if (k == 0 || k == n) return 1;
|
|
if (k < 0 || k > n) return 0;
|
|
|
|
// For efficiency, we use the smallest value of k or (n-k)
|
|
if (k > n - k) k = n - k;
|
|
|
|
real product = 1;
|
|
for (int i = 1; i <= k; ++i) {
|
|
product = product * (n - k + i) / i;
|
|
}
|
|
|
|
return round(product);
|
|
}
|
|
|
|
for (int n = 0; n <= 14; ++n) {
|
|
for (int k = 0; k <= n; ++k) {
|
|
string num = format("%5d", binomial(n, k));
|
|
write(stdout, num);
|
|
}
|
|
write("");
|
|
}
|