iİnformatikanın məktəbdə tədrisi

2-22r

Факториалом числа  n называется произведение чисел от 1 до n  (n! = 1.2.3. … .n). ( По определению 0! = 1, 1! = 1) Для заданного n вычислить  n!. До какого значения n мы получим правильный результат?

По идее, это совсем простая задача: взять f:=1; и затем умножать f  на 2, 3 и так далее до n. Эти действия и выполняются в цикле в строках 8, 9. В этой задаче интересно другое. Значение n! растет очень быстро. Так, если мы объявили f:integer; (строка 4), то мы можем получить правильный результат только до  n=12. При n=13 результат превосходит максимальное значение для integer (2147483647). Если же мы объявим f:Int64; ( не забудьте, это в Free Pascal, а   в  C++ long long f;), то правильный результат мы получим до n=20. 
Правда, если мы не хотим получить много верных цифр, то можно объявить f:double; Тогда можно вычислить n! до значения n=170, но с 15 верными первыми цифрами (а всего цифр в числе будет 307). 
Можно объявить f:extended;  (в C++ long double f;), тогда можно вычислить n! до значения n=1754, но с 17 верными первыми цифрами (а всего цифр в числе будет 4931).
Примечание. Для проверить правильности результатов  работы программы можно воспользоваться калькулятором в Windows.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

Program A2_22;

Var

 n,i:integer;

   f:integer;

BEGIN

  readln(n);

  f:=1;

  for i:=2 to n do

    f:=f*i;

  writeln(f);

  readln;

END.

//Program A2.22;

#include <iostream>

 

using namespace std;

 

int main()

{  int n,i;

    int f=1;

    cin>>n;

    for(i=2;i<=n;i++)

         f=f*i;

    cout << f << endl;

    return 0;

}