{$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.