Применение алгоритмов «длинной арифметики» для вычисления факториала числа. (Стандартные возможности позволяют вычислить факториал до 12)
Более детально — тут
uses crt; const nmax = 2100;//количество цифр в результате type ts = 0..9; chislo = array[1..nmax] of ts; procedure nul(var a: chislo);//аналог Zero var i: 1..nmax; begin for i := 1 to nmax do a[i] := 0; end; procedure perevod(s: string; var a: chislo);//аналог Translate var i, n: 1..nmax; begin n := length(s); nul(a); for i := 1 to n do a[n - i + 1] := ord(s[i]) - ord('0'); end; function kol(const a: chislo): word;//аналог Dlina var i: 1..nmax; begin i := nmax; while(a[i] = 0) and (i > 1) do i := i - 1; kol := i; end; procedure umn(var a, b, c: chislo);//аналог Multiplication var i, g, n, m: 1..nmax; p, v: ts; begin nul(c); m := kol(a); n := kol(b); for i := 1 to m do begin p := 0; for g := 1 to n do begin v := a[i] * b[g] + p + c[i + g - 1]; c[i + g - 1] := v mod 10; p := v div 10; end; c[i + n] := p; end; end; procedure pechat(var a: chislo);//аналог Print var i: 1..nmax; begin for i := kol(a) downto 1 do write(a[i]); writeln; end; procedure sum(a, b: chislo; var c: chislo);//этого у Вас нет, сумма длинных // в данном случае получение следующего числа +1 var i, j, r: 1..nmax; p: ts; begin p := 0; for j := 1 to kol(a) do begin r := b[j] + a[j] + p; p := r div 10; c[j] := r mod 10; end; c[j + 1] := p; end; var s: string; a, b, c, d, q: chislo; i, n, f: 1..nmax; begin clrscr; repeat write('Введите число от 1 до 810 n='); readln(n); until (n > 1) and (n < 811); //создаем 4 числа для операций добавления и умножения nul(b); b[1] := 1; nul(c); nul(a); a[1] := 1; c[1] := 1; d[1] := 1; for i := 2 to n do begin for f := 1 to nmax do a[f] := c[f];//запоминаем предыдущий множитель sum(a, d, c);//получаем следующий на 1 больше umn(b, c, q);//домножаем предыдущий результат результат=получаем факториал for f := 1 to nmax do b[f] := q[f];//запоминаем новый результат end; pechat(q); readln end.