Найти произведение натуральных чисел на диапазоне [17, 41] — Pascal(Паскаль)

uses crt;
const nmax=100;
type ts = 0..9;
     chislo=array[1..nmax] of ts;
 
procedure nul(var a:chislo);//обнуление массива
var i:1..nmax;
begin
for i:=1 to nmax do
a[i]:=0;
end;
 
function kol(const a: chislo):word;//количество значащих цифр
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);//умножение столбиком
var i,g,n,m:1..nmax;
    p:0..9;
    v:byte;
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 sum(a,b:chislo;var c:chislo);//сложение, у нас просто добавление +1
var i,j,r:longint; p:0..9;
begin
nul(c);
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 a,b,c,d,q:chislo;
    i,f:integer;
begin
clrscr;
nul(b);
b[1]:=1;
nul(a);
a[1]:=7;a[2]:=1;//запишем число 17 наоборот
d:=a;//запомним
for i:=1 to 24 do//от 18 до 41
 begin
  sum(d,b,c);//+1
  umn(a,c,q);//умножим
  a:=q;//запомним
 end;
for i:=kol(q) downto 1 do//вывод наоборот
write(q[i]);
readln
end.

Leave a Comment

45 − 43 =