Как можно считать числа около 10^250 в pascal? именно считать, не просто хранить. все доступные типы данных не подходят, т.е. нужно использовать что-то другое.
290
490
Ответы на вопрос:
Вот пример вычисления факториала числа 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
Обычное деление столбиком (после деления ответ записывается в о братном порядке) 122 | 2 122 61 | 2 0 60 30 | 2 1 30 15 | 2 0 14 7 | 2 1 6 3 | 2 1 2 1 1ответ: 1111010
Популярно: Информатика
-
Кричащийёж11.03.2023 14:50
-
annazukova2825.08.2021 11:26
-
hsjsjxn26.08.2021 16:53
-
mama148806.02.2023 07:28
-
vlad126919.07.2020 03:35
-
arina05040602.01.2023 10:18
-
ghhgbg02.05.2022 09:35
-
lipovtsev201619.04.2023 18:47
-
8192034610.12.2020 05:26
-
nik171611.03.2020 05:23