Другие языки программирования и технологии

Посчитань N!(фактариал)

И продолжение после Decorator
Процедура для нахождения точного значения факториала числа.

procedure TForm1.bbRunClick(Sender: TObject); //обработка события от мыши
var //это раздел указания переменных
result: string; //переменная result целого типа
M: array of integer;

//"M"- это матрица, или массив, причем динамический, то есть его размеры можно

F, i, j, k, n: integer;

//изменять, это увеличивает время выполнения программы, но интересно попробовать
begin
if med.text = '' then
med.text := '0'; //свойство text компонента med проверяется на наличие
n := StrToInt(Trim(MEd.Text));

//введенного числа, StrToInt-преобразование строки в число

if n < 4 then
exit; //trim-удаление пробелов из строки
PB.Max := (n + sqr(n)); //Это определение размеров PB
PB.Position := 0;
screen.Cursor := crHourGlass;

//появляется новый курсор, стандартный "виндовский"
setLength(M, 2); //определение границ массива
M[0] := 1; //присвоение 0-ому элементу массива М значения 1....
M[1] := 0;
k := 1;
for i := 1 to n do
begin

F := 0;
PB.StepBy(i * 2); //изменение показаний PB

for j := 0 to k do
begin
SetLength(M, k + 1);
M[j] := M[j] * i + F; //здесь основная идея программы
if (M[j] div 10) > 0 then
k := k + 1;
F := M[j] div 10;
M[j] := M[j] mod 10;
end;
end;
for i := k downto 0 do //перебор целых значений от k до 0
begin

if M > 0 then
break;
if M = 0 then
k := k - 1;
end;

SetLength(M, k); //изменение размеров массива М до кол-ва элементов-k
Result := '';
for j := k downto 0 do
Result := Result + IntToStr(M[j]);

mmOutput.Lines.Add(IntToStr(n) + '! = ' + result);

//добавление результата в редактор Memo(mmOutput)

if n6.Checked = true then
mmoutput.Lines.Add('В этом числе ' + IntToStr(length(result)) + ' цифр. ');
M := nil; //освобождение памяти IntToStr-преобразование числа в строку
screen.Cursor := crDefault; //смена курсора
Med.Text := '';
Med.SetFocus; //передача фокуса ввода компоненту med
end;
Михаил Митченко
Михаил Митченко
30 251
Лучший ответ
int Factorial(int n)
{
if (n < 0)
return 0;

if (n < 2)
return 1;

int nRet = 1;
for (int i = 2; i <= n; i++)
{
nRet *= i;
}

return nRet;
}
DELPHI
{
The factorial of a positive integer is defined as:

n! = n*(n-1)*(n-2)*(n-3)*...*2*1
1! = 1
0! = 1

Example: 5! = 5*4*3*2*1
}

// Итерация:

function FacIterative(n: Word): Longint;
var
f: LongInt;
i: Integer;
begin
f := 1;
for i := 2 to n do f := f * i;
Result := f;
end;

// рекурсия

function FacRecursive(n: Word): LongInt;
begin
if n > 1 then
Result := n * FacRecursive(n-1)
else
Result := 1;
end;
Анатолий К.
Анатолий К.
1 643
Открываешь эксель, Вставка-Функция.. . Пишешь в найти "факториал" и печатаешь число, факториал которого тебе надо вычислить...
Старец ..
Старец ..
1 471

Похожие вопросы