rusinfopro
?>

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

Информатика

Ответы

sveta740450
Вот пример вычисления факториала числа 200

const
  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:=r
end;

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:=s
end;

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:=r
end;

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
baumanec199613

#include <stdio.h>

#include <conio.h>

 

int main() {

    int i, j = 1, a, b;

    printf("Vvedite granici intervala:");

    printf("\nVvedite a: ");

    scanf("%d", &a);

    printf("Vvedite b: ");

    scanf("%d", &b);

    for(i = a; i <= b; i++)

    printf("%d\t%d\t%d\t\n",i, i*i, i*i*i);

    printf("\n\n");

    printf("Vivesti kvadrati i kubi sled. posl-ti: 1, 2, 4, 7, 11, 16...\n");

     for(i = 1; i <= 46; i+=j++)

    printf("%d\t%d\t%d\t\n",i, i*i, i*i*i);

getch();

}

Владимир-Денисович1080
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!

begin
  var a:=ArrRandom(ReadInteger('n='),-50,50); a.Println;
  Writeln('Среднее арифметическое отрицательных чисел: ',
      a.Where(x->x<0).Average);
  Writeln('Сумма чисел, кратных четырем: ',
      a.Where(x->x mod 4=0).Sum);
  Writeln('Произведение чисел на интервале [-10;10]: ',
      a.Where(x->x.Between(-10,10)).Aggregate(BigInteger(1),(x,y)->x*y))
end.

Пример
n= 90
2 -7 -9 23 49 3 -38 -3 -24 -50 -1 44 -33 -14 -39 42 -29 12 5 -27 35 -46 -23 36 26 18 -30 10 18 25 19 2 28 37 -21 4 40 42 10 23 5 -14 6 -10 35 11 -26 19 45 -36 38 44 29 17 -36 -2 -35 5 47 -19 -17 2 30 1 -18 48 -34 -19 -44 8 -49 -20 -48 32 18 -2 -1 38 -49 -35 -6 1 16 4 37 26 24 -40 23 32
Среднее арифметическое отрицательных чисел: -25.1052631578947
Сумма чисел, кратных четырем: 124
Произведение чисел на интервале [-10;10]: -10450944000000

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

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

Популярные вопросы в разделе

luza5
Иванович621
olgavbaranova
sashakrotova943
Исаченко Тераски1181
avetisov-84850
ermisyareg436
salesrawtogo
valya-7777
vickuznetsova8677
la-ronde737
Gainalii1912
Budanov317
demakova1969
vadimkayunusov