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