Написать программу которая вычисляет: (100! — 2^100) либо 100 факториалов — 2 в степени 100- Pascal(Паскаль)

{$N+}
program Project2;
uses
  crt;
  var p,p1:extended;
  n:integer;
 
function Factorial(n:integer):extended;
var i:integer;
 p:extended;
begin
p:=1;
if(n = 0 ) then
    Factorial := 1
else
 for i:=1 to n do
 begin
   p:= p*i;
 end;
  Factorial := p;
end;
function Pow(a:real;n:integer):extended;
var i:integer;
 p:extended;
begin
p:=1;
if(n = 0 ) then
    Pow := 1
else
 for i:=1 to n do
 begin
   p:= p*a;
 end;
  Pow := p;
end;
begin
  write('n=');readln(n);
  p:=Factorial(n);
  writeln(n,'!= ',p);
  p1:=Pow(2,100);
  writeln('2^100 = ',p1);
  p := p - p1;
  writeln(n,'! - 2^100 = ',p);
  readln;
end.
uses crt;
var a:array [1..158] of byte; i,l,j:byte;
b:array [1..32] of byte;
procedure vm(t:byte; var a:array of byte; var l:byte);
var s,ost:integer; i,j:byte;
begin
i:=1; l:=1; ost:=0; a[1]:=t;
repeat
inc(i);
for j:=1 to l do
   begin
   case t of
   1:s:=a[j]*i+ost; {факториал}
   2:s:=a[j]*2+ost; {степень}
   end;
   if s>9 then
      begin
      a[j]:=s mod 10;
      ost:=s div 10;
      end
   else
      begin
      a[j]:=s;
      ost:=0;
      end;
   end;
if ost<>0 then
   repeat
   inc(l);
   a[l]:=ost mod 10;
   ost:=ost div 10;
   until ost=0;
until i=100;
end;
procedure raz(a,b:array of byte; l:byte; var c:array of byte);
var j:byte;
begin
i:=0;
repeat
inc(i);
if a[i-1]>=b[i] then a[i-1]:=a[i-1]-b[i] else
   begin
   a[i-1]:=a[i-1]+10-b[i];
   j:=i;
   while a[j]=0 do
      begin
      a[j]:=9;
      inc(j);
      end;
   dec(a[j]);
   end;
until i=l;
for i:=0 to l do c[i]:=a[i];
end;
begin
clrscr;
vm(2,b,l); {2^100}
vm(1,a,j); {100!}
raz(a,b,l,a); {разность}
write('100!-2^100= ');
for j:=j downto 1 do write(a[j]);
readkey;
end.

Leave a Comment

− 1 = 1