• Как можно считать числа около 10^250 в pascal? Именно считать, не просто хранить. Все доступные типы данных не подходят, т.е. нужно использовать что-то другое.

Ответы 1

  • Вот пример вычисления факториала числа 200const  n=1000; {максимальное количество цифр в числе}type  big=record    v:array[1..n] of byte; {массив с цифрами числа}    m:integer {количество цифр в числе}  end;function Str2Big(s:string):big;{Переводит строковое представление в big}var  i,n,k,err: integer;  r:big;begin  n:=Length(s);  r.m:=n;  for i:=1 to n do   begin    Val(s[i],k,err);    r.v[i]:=k  end;  Str2big:=rend;function Big2Str(p:big):string;{Переводит представление big в строковое}var  i,n:integer;  c,s:string;begin  s:='';  n:=p.m;  for i:=1 to n do  begin    Str(p.v[i],c);    s:=s+c  end;  Big2Str:=send;function TruncBig(a:big):big;{Усекает незначащие нули}var  i,p,n:integer;  r:big;begin  n:=a.m;  p:=0;  while (p<n) and (a.v[p+1]=0) do p:=p+1;  for i:=1 to n-p do r.v[i]:=a.v[i+p];  r.m:=n-p;  TruncBig:=rend;function MultBig(a,b:big):big;{Возвращает произведение чисел типа big}var  i,j,k,m,n,s:integer;  r:big;begin  m:=a.m; n:=b.m;  for i:=m to m+n do r.v[i]:=0;  r.m:=m+n;  for j:=n downto 1 do  begin    if b.v[j]=0 then r.v[j+m+n-1]:=0    else begin      k:=0;      for i:=m downto 1 do      begin        s :=a.v[i]*b.v[j]+r.v[i + j]+k;        r.v[i+j]:=s mod 10;        k:=s div 10      end;          r.v[j] := k    end  end;  MultBig:=TruncBig(r);end;var  i:integer;  s:string;  bi,bs:big;begin  bs:=Str2Big('1');  for i:=1 to 200 do begin    Str(i,s);    bi:=Str2Big(s);    bs:=MultBig(bs,bi);    end;  s:=Big2Str(bs);  Writeln(s)end.Результат788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000
    • Автор:

      monserrat
    • 6 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years