Вычисление факториала числа

Задача: 

Факториал числа представляет собой произведение всех натуральных чисел от 1 до этого числа включительно. Например, факториал числа 7 выглядит так:
1 * 2 * 3 * 4 * 5 * 6 * 7

Факториал числа обозначается как само число после которого следует восклицательный знак. Например, 7!. Таким образом:
7! = 1 * 2 * 3 * 4 * 5 * 6 * 7 = 5040

С увеличением числа его факториал быстро возрастает. Так если 3! = 6, то уже 10! = 3628800. Поэтому для натуральных чисел больше 12-ти в языке программирования Паскаль просто так факториал вычислить нельзя.

Допустим, требуется определить факториал числа, которое ввел пользователь.

Алгоритм решения задачи: 

Переменной factorial сначала присваивается значение 1.
0! = 1 и 1! = 1.

Если пользователь ввел число больше единицы, то выполняется цикл, в теле которого на каждой итерации значение переменной factorial умножается на следующее натуральное число (переменную i).

Программа на языке Паскаль: 

var
    factorial: longint;
    n, i: byte;
 
begin
    write('n = '); readln(n);
 
    factorial := 1;
 
    for i:=2 to n do
        factorial := factorial * i;
 
    writeln('n! = ', factorial);
 
readln;
end.

Комментарии

Вычислить сумму S значений

Вычислить сумму S значений функции Y = f(x):
S=∑i lg((x^2+1)/(i-1)!)
при x=-1+0.2*I; I=1.10

Помогите с решением

Требуется написать программу, которая может вычислить последнюю, не равную нулю цифру для любого факториала (0 Во входном файле input.txt записана серия неотрицательных целых чисел, не превышающих 10000, каждое число в своей собственной строке.
Вывод
В выходной файл output.txt для каждого целого должна содержаться точно одна строка. Каждая строка должна содержать величину N, в позициях с 1 по 5 с ведущими пробелами и не ведущими нулями. Позиции с 6 по 9 должны содержать “->”. Позиция 10 должна содержать единственную последнюю не равную нулю цифру N!.

Поиск последней не равной

Поиск последней не равной нулю цифры числа:

var
    a: longint;
 
begin
    readln(a);
    while True do begin
        if a mod 10  0 then begin
            writeln(a mod 10);
            break;
        end;
        a := a div 10;
    end;
end.

В Паскале нельзя вычислить даже 100!, так как значение выйдет за пределы возможного longint. Целочисленного типа длиннее longint в Паскале нет.

Длиннее longint - int64

взять тип int64

Говорят, что решать нужно

Говорят, что решать нужно через массивы, но не было возможности достаточно ознакомиться с ними

Массивы используют для записи

Массивы используют для записи очень длинного числа, разбивая его цифры на группы.

но при больших значениях n

но при больших значениях n это программа не верна.

var

var a,b,d,c:integer;
begin
readln(a);
d:=1;
for b:=1 to a do
begin
c:=c+1;
d:=d*c;
end;
write(d);
end.

еще ошибочка: ты не присвоил

еще ошибочка: ты не присвоил С значение до цикла! Оно должно быть нулевым.
С тут нужна, т.к. обозначает множитель.

можно не присваивать, тогда

можно не присваивать, тогда по умолчанию равно 0.

зачем с?

Какой смысл переменной с? Она лишняя

N!-M!

Составить программу для определения N!-M!

N! - M!

program faktorial;
var n, m, i, res, res2: integer;// инициализируем переменные
begin // начало
  read (n, m);// считываем число в факториале
  res:=1; // присваиваем будущему результату 1
  res2:=1;
  for i:=1 to n do // заходим в цикл FOR (уроки 5,6), присваиваем i от 1 до n
    res:=res*i; // умножаем наш результат на i
  for i:=1 to m do // заходим в цикл FOR (уроки 5,6), присваиваем i от 1 до m
    res2:=res2*i; // умножаем наш результат на i
  write (res-res2); // выводим результат
end. // конец программы