Факториал числа - Pascal ABC
Формулировка задачи:
Написал программу, которая считает факториал числа.
Но считает она до максимального значения типа REAL. Как сделать, чтобы считался факториал для любого числа? (С массивами пока не знаком.)
Кто может помочь с решением проблемы? И можно ли решить без массивов?
Решение задачи: «Факториал числа»
textual
Листинг программы
Uses CRT;
var n:word;
m, cnk, fac1, fac2, fac100:BigInteger;
Function Factor(const n:word):BigInteger;
var fct:BigInteger;
begin
fct:=1;
for var i:=2 to n do
fct:=fct*i;
Factor:=fct;
end;
begin
m:=0;
n:=100;
WriteLn('n = ',n);
fac100:=Factor(n);
WriteLn('n! = ',fac100);
for var k:=1 to n do
begin
Write('k = ',k:2);
fac1:=Factor(k);
fac2:=Factor(n-k);
cnk:=fac100/(fac1*fac2);
WriteLn(' Cnk = ',cnk);
m:=m+cnk;
end;
WriteLn;
WriteLn('Result: ',m);
end.
Объяснение кода листинга программы
- Подключается библиотека CRT.
- Объявляются переменные n, m, cnk, fac1, fac2, fac100 типа BigInteger.
- Определяется функция Factor, которая принимает целочисленный параметр n и возвращает BigInteger.
- В функции Factor инициализируется переменная fct единицей.
- В цикле от 2 до n (inclusive) переменная fct умножается на текущее значение i.
- По завершении цикла значение fct присваивается переменной Factor.
- Выводится значение n.
- Вычисляется факториал n и выводится значение n!.
- Запускается цикл от 1 до n (inclusive).
- Внутри цикла выводятся значения k, fac1, fac2, cnk.
- Значение cnk вычисляется как частное от деления факториала n на произведение факториалов k и (n-k).
- Выводится значение cnk.
- Переменная m инициализируется значением 0.
- Цикл завершается.
- Выводится значение Result, которое равно сумме всех значений cnk.