Факториалом числа 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;
}
|
|