0 / 0 / 0
Регистрация: 15.08.2015
Сообщений: 6
1

Вычислить факториал введенного числа

15.08.2015, 10:14. Показов 4493. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Обсчитать факториал введенного числа за доп. while
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2015, 10:14
Ответы с готовыми решениями:

Вычислить факториал введенного числа (цикл for)
помогите решить задачу- нужно вычислить факториал вводимого числа с использованием оператора...

Вычислить факториал введенного с клавиатуры числа
Задание 2: Составить программу с использованием цикла с параметрами. Предусмотреть задание исходных...

Вычислить факториал числа, введенного с клавиатуры, используя цикл с предусловием
4) Написать программу, которая вычисляет факториал числа, введенного с клавиатуры используя цикл с...

Написать программу, которая вычисляет факториал введенного с клавиатуры числа
:cry:Турбо Паскаль с процедурой Написать программу, которая вычисляет факториал введенного с...

14
20 / 15 / 14
Регистрация: 05.12.2010
Сообщений: 256
Записей в блоге: 1
16.08.2015, 09:48 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Добавлено через 3 минуты
Цитата Сообщение от just skill Посмотреть сообщение
3. Обсчитать факториал введенного числа за доп. while.
Смотря какой язык, например PasscalABC может только до 17 вычислить факториал..
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
program Made_in_Salechard;
uses crt;
var i,f:integer;
fac:real;
Begin
clrscr;
write('Введите факториал=');
readln(f);
fac:=1;
while i<f do begin
i:=i+1;
fac:=fac*i;
writeln('!',i,'=',fac);
end;
 
end.
0
1 / 1 / 0
Регистрация: 22.06.2015
Сообщений: 15
16.08.2015, 14:11 3
MrAleksej, если очень захотеть, в паскале можно работать с большими числами, с помощью строк
0
20 / 15 / 14
Регистрация: 05.12.2010
Сообщений: 256
Записей в блоге: 1
16.08.2015, 14:45 4
Azavod, если захотеть, то можно факториал и на деревянных палочках высчитать....
0
1 / 1 / 0
Регистрация: 22.06.2015
Сообщений: 15
16.08.2015, 21:02 5
MrAleksej, просто даже есть такой класс задач - работа с большими числами
там - то как раз строки и используются. Так как ни тип переменный не поддерживает 250-значные числа)
0
20 / 15 / 14
Регистрация: 05.12.2010
Сообщений: 256
Записей в блоге: 1
18.08.2015, 21:12 6
Цитата Сообщение от Azavod Посмотреть сообщение
работа с большими числами
Я как то пробовал вычислить большие числа через строки - терпения не хватило... Замаялся разбивать строки на числа и перемножать... Azavod, если Вы такой оптимист - то попробуйте это реализовать ради интереса.
PS: В теории легко, на практике сложнее...
0
5068 / 2639 / 2349
Регистрация: 10.12.2014
Сообщений: 10,007
19.08.2015, 07:08 7
Цитата Сообщение от MrAleksej Посмотреть сообщение
например PasscalABC может
Зато PABC.NET уже нормально может и 1000! посчитать:
Pascal
1
2
3
4
5
6
7
begin
  var N := ReadLnInteger('N =');
  var F : BigInteger := 1;
  for var i := 2 to N do
    F := F * i;
  WriteLnFormat('{0}! = {1}', N, F);
end.
Цитата Сообщение от MrAleksej Посмотреть сообщение
Я как то пробовал вычислить большие числа через строки - терпения не хватило... Замаялся разбивать строки на числа и перемножать... Azavod, если Вы такой оптимист - то попробуйте это реализовать ради интереса.
PS: В теории легко, на практике сложнее...
Вот для PABC.NET без BigInteger (прямо „на ходу“ написал):
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
begin
  var N := ReadLnInteger('N =');
  var F : array of Integer;
  var L := 0; SetLength(F, 1); F[0] := 1;
  for var i := 2 to N do
    begin
      var D := 0;
      for var p := 0 to L do
        begin
          D += F[p] * i;
          F[p] := D mod 10;
          D := D div 10;
        end;
      while D > 0 do
        begin
          L += 1;
          SetLength(F, Succ(L));
          F[L] := D mod 10;
          D := D div 10;
        end;
    end;
  Write(N, '! = ');
  for var p := L downto 0 do
    Write(F[p]);
  WriteLn;
end.
P.S. И для второго кода 1000! не предел…
0
1646 / 1075 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
19.08.2015, 10:25 8
Программа перемножения двух целых чисел в столбик

Добавлено через 7 минут
Прошу заметить, что эта тема находится в разделе Turbo-Pascal.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,697
19.08.2015, 11:13 9
Цитата Сообщение от MrAleksej Посмотреть сообщение
Я как то пробовал вычислить большие числа через строки - терпения не хватило... Замаялся разбивать строки на числа и перемножать... Azavod, если Вы такой оптимист - то попробуйте это реализовать ради интереса.
PS: В теории легко, на практике сложнее...
и напрактике легко
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
uses crt;
  var
    NumA,NumB,NumC:string;
  function EnterNumber(a:char):string;
    var
      b:string;
    begin
      b:='';
      write('Enter Number ',a,' :');
      while(ord(a)<>13)and(length(b)<250)do
        begin
          a:=readkey;
          if a in ['0'..'9'] then
            begin
              b:=a+b;{реверсирование}
              write(a);
            end;
        end;
      EnterNumber:=b;
      writeln;
    end;
  function SummaNumber(a,b:string):string;
    var
      c:byte;
      d:string;
    begin
      c:=0;
      d:='';
      while(length(a)+length(b))>0 do
        begin
          if length(a)>0 then
            begin
              c:=c+ord(a[1])-ord('0');
              delete(a,1,1);
            end;
          if length(b)>0 then
            begin
              c:=c+ord(b[1])-ord('0');
              delete(b,1,1);
            end;
          d:=chr(c mod 10 + ord('0'))+d;{обратное реверсирование}
          c:=c div 10;
        end;
      while c>0 do
        begin
          d:=chr(c mod 10 + ord('0'))+d;
          c:=c div 10;
        end;
      SummaNumber:=d;
    end;
  begin
    NumA:=EnterNumber('A');
    NumB:=EnterNumber('B');
    NumC:=SummaNumber(NumA,NumB);
    writeln('Result :',NumC);
    readln;
  end.
0
1646 / 1075 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
19.08.2015, 11:23 10
Constantin Cat, речь шла об умножении, а не сложении.
0
5068 / 2639 / 2349
Регистрация: 10.12.2014
Сообщений: 10,007
19.08.2015, 11:39 11
Для TP можно воспользоваться динамическими списками…
Цитата Сообщение от APALoff Посмотреть сообщение
эта тема находится в разделе Turbo-Pascal
Немножко выкроил времени и переписал под ТР для факториалов от 0 до 3000 :
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
type
  tNum = ^rNum;
  rNum = record
    N : Integer;
    X : tNum;
  end;
 
var
  N, i, D : Integer;
  F, L, C : tNum;
 
begin
  Write('N = '); ReadLn(N);
  New(F); F^.N := 1; F^.X := nil; L := F;
  for i := 2 to N do
    begin
      D := 0;
      C := F;
      while C <> nil do
        begin
          D := D + C^.N * i;
          C^.N := D mod 10;
          D := D div 10;
          C := C^.X;
        end;
      while D > 0 do
        begin
          New(L^.X);
          L := L^.X;
          L^.N := D mod 10;
          L^.X := nil;
          D := D div 10;
        end;
    end;
  Write(N, '! = ');
  repeat
    C := F;
    while C^.X <> L do
      C := C^.X;
    Write(L^.N);
    Dispose(L);
    L := C;
    L^.X := nil;
  until F^.X = nil;
  WriteLn(F^.N);
  Dispose(F);
end.
А вот так и факториал от 5000 не предел (тоже дя ТР):
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
type
  tNum = ^rNum;
  rNum = record
    N : Word;
    X : tNum;
  end;
 
var
  N, i, D, Z : Word;
  F, L, C : tNum;
 
begin
  Write('N = '); ReadLn(N);
  New(F); F^.N := 1; F^.X := nil; L := F;
  Z := 0;
  for i := 2 to N do
    begin
      D := 0;
      C := F;
      while C <> nil do
        begin
          D := D + C^.N * i;
          C^.N := D mod 10;
          D := D div 10;
          C := C^.X;
        end;
      while D > 0 do
        begin
          New(L^.X);
          L := L^.X;
          L^.N := D mod 10;
          L^.X := nil;
          D := D div 10;
        end;
      while F^.N = 0 do
        begin
          Inc(Z);
          C := F; F := F^.X; Dispose(C);
        end;
    end;
  Write(N, '! = ');
  repeat
    C := F;
    while C^.X <> L do
      C := C^.X;
    Write(L^.N);
    Dispose(L);
    L := C;
    L^.X := nil;
  until F^.X = nil;
  Write(F^.N); Dispose(F);
  for i := 1 to Z do Write(#48); WriteLn;
end.
Добавлено через 2 минуты
… Для 6500 точно выдал ;–)
1
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,697
19.08.2015, 12:38 12
Цитата Сообщение от APALoff Посмотреть сообщение
речь шла об умножении, а не сложении.
Без проблем, я только показал метод, теперь ещё и с умножением:
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
uses crt;
  var
    NumA,NumB,NumC:string;
  function reverse(a:string):string;
    begin
      if length(a)>1 then reverse:=reverse(copy(a,2,length(a)-1))+a[1]
                     else reverse:=a;
    end;
  function EnterNumber(a:char):string;
    var
      b:string;
    begin
      b:='';
      write('Enter Number ',a,' :');
      while(ord(a)<>13)and(length(b)<100)do
        begin
          a:=readkey;
          if a in ['0'..'9'] then
            begin
              b:=a+b;
              write(a);
            end;
        end;
      EnterNumber:=b;
      writeln;
    end;
  function SummaNumber(a,b:string):string;
    var
      c:byte;
      d:string;
    begin
      c:=0;
      d:='';
      while(length(a)+length(b))>0 do
        begin
          if length(a)>0 then
            begin
              c:=c+ord(a[1])-ord('0');
              delete(a,1,1);
            end;
          if length(b)>0 then
            begin
              c:=c+ord(b[1])-ord('0');
              delete(b,1,1);
            end;
          d:=d+chr(c mod 10 + ord('0'));
          c:=c div 10;
        end;
      while c>0 do
        begin
          d:=d+chr(c mod 10 + ord('0'));
          c:=c div 10;
        end;
      SummaNumber:=d;
    end;
  function MultyOneNumber(a:string;b:char):string;
    var
      c:byte;
      d:string;
    begin
      c:=0;
      d:='';
      b:=chr(ord(b)-ord('0'));
      while length(a)>0 do
        begin
          c:=c+(ord(a[1])-ord('0'))*ord(b);
          delete(a,1,1);
          d:=d+chr((c mod 10)+ord('0'));
          c:=c div 10;
        end;
      while c>0 do
        begin
          d:=d+chr((c mod 10)+ord('0'));
          c:=c div 10;
        end;
      MultyOneNumber:=d;
    end;
  function MultyNumber(a,b:string):string;
    var
      c:string;
    begin
      c:='';
      while length(b)>0 do
        begin
          c:=SummaNumber(c,MultyOneNumber(a,b[1]));
          a:='0'+a;
          delete(b,1,1);
        end;
      MultyNumber:=c;
    end;
  begin
    NumA:=EnterNumber('A');
    NumB:=EnterNumber('B');
    NumC:=SummaNumber(NumA,NumB);
    writeln('Result Summa:',reverse(NumC));
    NumC:=MultyNumber(NumA,NumB);
    writeln('Result Multy:',reverse(NumC));
    readln;
  end.
0
1646 / 1075 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
19.08.2015, 12:46 13
Цитата Сообщение от Constantin Cat Посмотреть сообщение
я только показал метод,
Так эти методы уже были "показаны" на форуме и насколько я помню реализованы были несколько покороче.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,697
19.08.2015, 13:06 14
Цитата Сообщение от APALoff Посмотреть сообщение
Так эти методы уже были "показаны" на форуме и насколько я помню реализованы были несколько покороче.
Я этого не знал. Давно когдато писал, но код посеял, сегодня увидел сообщение о раелизации в строках, с утра написал снова.
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
21.08.2015, 08:20 15
Вычислить n!, где n<=100

только немного код подправить надо
Pascal
1
2
i2a('1',N,b,l2);
  for i:=1 to nn do begin
заменить на
Pascal
1
2
3
4
  i2a('1',N,b,l2);
  i:=0;
  while i< nn do begin
    i:=i+1;
0
21.08.2015, 08:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2015, 08:20
Помогаю со студенческими работами здесь

Написать программу, которая вычисляет факториал числа, введенного с клавиатуры
Приветствую Всех. Помогите пожалуйста. Написать программу, которая вычисляет факториал числа,...

Написать программу, содержащую функцию, которая вычисляет факториал числа, введенного с клавиатуры
Написать программу, содержащую функцию, которая вычисляет факториал числа, введенного с клавиатуры....

Вычислить факториал числа
необходимо вычислить факториал числа USES CRT; VAR p,k,n,m: integer; BEGIN CLRSCR;...

Вычислить факториал заданного целого числа
Вычислить факториал заданного целого числа n!=1*2*3…n

Вычислить факториал заданного целого числа с помощью процедуры
вычислить факториал заданного целого числа с помощью процедуры

Используя рекурсию вычислить факториал целого положительного числа
Используя рекурсию(обращение функции или процедуры к самой себе),напишите программу расчёта...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru