Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
17 / 17 / 0
Регистрация: 25.01.2009
Сообщений: 63
1

100 факториалов - 2 в степени 100

25.05.2009, 11:16. Показов 5688. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
написать программу которая вычисляет:100 факториалов - 2 в степени 100
100!-2100
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2009, 11:16
Ответы с готовыми решениями:

Составить программу для вычисления 100!+2(100) {2 в степени 100}
Еще не могли бы вы помочь мне с этим заданием: Составить программу для вычисления 100!+2(100) {2 в...

Необходимо задать массив типа 100×100, считать с клавиатуры натуральное число n≤100, построить соответствующую матрицу типа n×n и вывести ее на экран
37. Решить задачу в Turbo Pascal.Необходимо задать массив типа 100×100, считать с клавиатуры...

Задано 50 целых чисел от 1 до 100. Определить, сколько среди этих чисел факториалов числа.
помогите решить задачу. Задано 50 целых чисел от 1 до 100. Определить, сколько среди этих чисел...

Массив В(20) заполнить целыми случайными числами из диапазона от -100 до 100
Заранее спасибо. Массив В(20) заполнить целыми случайными числами из диапазона от -100 до 100....

13
1512 / 779 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
25.05.2009, 11:35 2
Вот код программы
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{$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.
1
Посланник моего господина
111 / 106 / 52
Регистрация: 02.05.2009
Сообщений: 181
25.05.2009, 11:47 3
Могу Вам посоветовать использовать длунную арифметику. Статей по этой теме много.
Неплохая статья: http://cryptoblog.ru/archives/47. В этой статье очень быстро приходят к выводу упрощенной формулы Стирлинга при отбрасывании радикального коэффициента.
Оценка: 100! -- (100/2.71)^100 -- (36.8)^100 -- (2e+31)^4 -- 16e+124 — число 100! имеет приблизительно 125 знаков в десятичной форме записи.
2^100 -- 1024^10 -- 1e+30 — это оценка, калькулятор говорит 2^100 = 1.26e+30 — 30 знаков в десяичной записи числа 2^100.

P.S. Появился ответ от Sergei. Замечание: extended всё-таки вещественный тип, которому свойственно "проглатывать" младшие разряды. Как бы второй член разности не был проигнорирован на фоне 100!.
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
25.05.2009, 12:42 4
Лучший ответ Сообщение было отмечено как решение

Решение

Могу Вам посоветовать использовать длинную арифметику.
Поддерживаю. Задача конкретно на эту тему.
Но указанная ссылка никакого отношения к этой теме не имеет, по теме нужно точное, а не приближенное вычисление.
1
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
25.05.2009, 12:49 5
а если сделать типа калькулятора , который может вычислять такие числа, сделать с помощью массива
0
Посланник моего господина
111 / 106 / 52
Регистрация: 02.05.2009
Сообщений: 181
25.05.2009, 12:56 6
Цитата Сообщение от Puporev Посмотреть сообщение
Но указанная ссылка никакого отношения к этой теме не имеет, по теме нужно точное, а не приближенное вычисление.
То была оценка порядка величин, чтобы оценить необходимую память (размер массива, в виде которого представляется число) во время реализации алгоритма, а также ориентировочно время выполнения программы. Оценка показала, что 100! имеет 125 порядок, а 2^100 всего 30 (100!>>2^100)
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
25.05.2009, 13:16 7
а если сделать типа калькулятора , который может вычислять такие числа, сделать с помощью массива
Да есть уж такие калькуляторы и модули для работы с длинными числами. Человеку задали самому попробовать решить эту задачу.
Нужно сотавить три процедуры
1.Вычисление факториала чисел больше 12.
2.Возведение в большую степень.
3.Вычитание длинных чисел.
По всем трем пунктам есть довольно много инфы с алгоритмами и готовыми кодами в интеренете и в некоторых учебниках. Надо просто собрать все в кучку, а поскольку задачу надо не в общем виде решить, а для конкретных чисел, то она упрощается.
1
17 / 17 / 0
Регистрация: 25.01.2009
Сообщений: 63
25.05.2009, 16:44  [ТС] 8
если не трудно напиши коментарии! заранее благодарю

Добавлено через 3 часа 23 минуты 43 секунды
Цитата Сообщение от Sergei Посмотреть сообщение
Вот код программы
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{$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.

Для чего нужна вторая процедура?что она делает?не могу ее понять...
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
25.05.2009, 16:46 9
Для чего нужна вторая процедура
А где Вы видите процедуры?
0
17 / 17 / 0
Регистрация: 25.01.2009
Сообщений: 63
25.05.2009, 16:47  [ТС] 10
Цитата Сообщение от Puporev Посмотреть сообщение
А где Вы видите процедуры?
ошибся.....функция....???
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
25.05.2009, 16:51 11
Если Вы даже не догатываетесь, что делает функция Pow, то мой Вам совет, не теряйте времени, обращайтесь в платный раздел. Код от Сергея Вам не нужен, Вам нужна программа на длинную арифметику, как я писал выше. Эту программу Вам за так никто писать не будет. А функция, которую обычно называют Pow или Power возводит числа в степень.
2
0 / 0 / 2
Регистрация: 23.09.2012
Сообщений: 130
28.11.2013, 21:08 12
А как вот в этой задаче сделать так чтоб она выдавала длинное число а не через е?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
program Project2;
uses
  crt;
  var
  p,p1:real;
  n:integer;
  function Factorial(n:integer):real;
var i:integer;
 p,p1:real;
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):real;
var i:integer;
 p:real;
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.
Добавлено через 1 час 4 минуты
тут объединял коды и собрал задачку))))
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
uses crt;
const max=28;
var k:array[1..max]of longint;
var x:array[0..90000] of byte;
m,l:longint;
i,j,n:integer;
p,s,otv:string;
a:longint;
 
 
 
procedure f;
var i:longint;
    carry,db:byte;
begin
 carry:=0;
 for i:=1 to a do
  begin
   db:=x[i]*2+carry;
   x[i]:=db mod 10;
   carry:=db div 10;
  end;
 if carry>0 then
  begin
   inc(a);
   x[a]:=carry;
  end;
end;
 
 
 
var v:longint;
    q:longint;
begin
  write('Â êàêóþ ñòåïåíü âîçâîäèì 2 ^ ');
 readln(v);
 a:=1;
 x[1]:=1;
 for q:=1 to v do
  f;
 for q:=a downto 1 do
 
  write(x[q]);
 
 writeln;
 
 
 begin
for i:=1 to max do k[ i]:=0; l:=1000000; s:=''; write('Ââåäèòå ÷èñëî äëÿ çíà÷åíèÿ ôàêòîðèàëà: '); readln(n); k[1]:=1;
for i:=1 to n do begin m:=0; for j:=1 to max do begin k[j]:=k[j]*i+m; m:=k[j] div l; k[j]:=k[j] mod l end end;
for j:=max downto 1 do begin str(k[j]:6,p); s:=s+p end; for j:=1 to length(s) do if s[j]=' ' then s[j]:='0';
for j:=1 to length(s) do if s[j]>'0' then begin s:=copy(s,j,length(s)-j+1); break end;
j:=1; while(s[j]='0')do begin s[j]:=' '; inc(j) end; writeln; writeln(s); readln ;
end;
 
 
end;
end.
Но увы как теперь сложить факториал и степень, не кто не знает? ПЛИЗ))
0
55 / 52 / 58
Регистрация: 04.04.2013
Сообщений: 102
29.11.2013, 16:46 13
Процедурой vm я и 1000! на экран выводил.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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.
0
908 / 756 / 833
Регистрация: 06.09.2013
Сообщений: 1,561
29.11.2013, 19:36 14
Вот такую программу для вычисления степеня двойки я когда-то написал для себя:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{ программа вычисляет 2 в степени d. }
 
uses crt; 
var
  A, B: array[0..100000]of integer;       
  j, K, i, c, D, N, M: integer;
 
begin
  //clrscr;
  write('Введите показатель степени:  ');
  read(D);
  A[1] := 1;
  M := 1;
  N := D;
  for j := 1 to N do
  begin
    c := 0;
    for i := M downto 1 do
    begin
      B[i] := (2 * A[i] + c) mod 10; c := (2 * A[i] + c) div 10;
    end;
    if c > 0 then
    begin
      A[1] := c;
      for i := 1 to M do A[i + 1] := B[i]; 
      inc(M);
    end
    else
    for i := 1 to M do A[i] := B[i];
  end;
  writeln;
  writeln('  2 в степени ', D, ':');
  for i := 1 to M do write(A[i]);
  writeln;
  writeln;
  writeln('Количество цифр числа: ', M);
  writeln;
  textcolor(red);
  readln;
end.
0
29.11.2013, 19:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2013, 19:36
Помогаю со студенческими работами здесь

Если элемент массива больше 100, то заменить его на 100
дан одномерный массив из R чисел. нужно изменить значения элементов массива. если элемент больше...

Все элементы вектора А(100), кратные 7, перенести в массив D(100)
1 Все элементы вектора А(100), кратные 7, перенести в массив D(100), и найти сумму всех остальных...

Написать программу,которая выводит таблицу стоимости продукта в диапазоне от 100 г до 1 кг с шагом в 100 г
Помогите написать программу через Repeat. Написать программу,которая выводит таблицу стоимости...

Сколько можно купить быков, коров и телят, на 100 рублей 100 голов скота
Составить алгоритм решения задачи: сколько можно купить быков, коров и телят, платя за быка 10...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru