PascalABC.NET 3.4.2, сборка 1884 от 24.11.2018
Внимание! Если программа не работает, обновите версию!
function Cnk(n, k: integer): BigInteger;
begin
if (n = 0) or (n = k) then Result := 1
else
begin
var (p1, p2) := (BigInteger(1), BigInteger(1));
for var i := 2 to n - k do
p2 *= i;
for var i := k + 1 to n do
p1 *= i;
Result := p1 div p2
end
end;
begin
var n := ReadInteger('n=');
if n = 0 then Print(1)
else
begin
var St := new Stack;
for var i := 0 to n div 2 do
begin
var b := Cnk(n, i);
b.Print;
St.Push(b)
end;
if n.IsEven then St.Pop;
while St.Count > 0 do
begin
St.Peek.Print;
St.Pop
end
end
end.
Пример
n= 50
1 50 1225 19600 230300 2118760 15890700 99884400 536878650 2505433700 10272278170 37353738800 121399651100 354860518600 937845656300 2250829575120 4923689695575 9847379391150 18053528883775 30405943383200 47129212243960 67327446062800 88749815264600 108043253365600 121548660036300 126410606437752 121548660036300 108043253365600 88749815264600 67327446062800 47129212243960 30405943383200 18053528883775 9847379391150 4923689695575 2250829575120 937845656300 354860518600 121399651100 37353738800 10272278170 2505433700 536878650 99884400 15890700 2118760 230300 19600 1225 50 1