Предмет: Информатика,
автор: Аидо4каааа
Напишите программу, которая вводит натуральное число N и определяет его факториал, то есть произведение натуральных чисел от 1 до N : N ! = 1·2·{...}· N .
Входные данные
Входная строка содержит одно натуральное число N .
Выходные данные
Программа должна вывести одно число – факториал введённого числа N .
Ответы
Автор ответа:
0
program pr;
var i,x,a:longint;
begin
readln(a);
x:=1;
for i:=2 to a do
x:=x*i;
writeln(x);
end.
var i,x,a:longint;
begin
readln(a);
x:=1;
for i:=2 to a do
x:=x*i;
writeln(x);
end.
Автор ответа:
0
Есть один нехороший момент в таком решении. Если введенное значение превысит 20, произойдет арифметическое переполнение, которое в Паскале по умолчанию игнорируется, т.е. программа тихонько выдаст неверный ответ.
Автор ответа:
0
Поэтому полезно при вводе проверять, чтобы введенное значение было между 1 и 20, либо в случае, если n>20, переходить на переменные типа real.
Автор ответа:
0
Хотя, для школьной задачки решение безупречное.
Автор ответа:
0
Вот написал и сам ошибся. 20 - это для переменной типа Int64. А для longint - всего 12
Автор ответа:
0
var
i:integer;
f,n:longint;
fr:real;
begin
Write('N='); Read(n);
if n<=12 then begin
f:=1;
for i:=2 to n do f:=f*i;
Writeln('F=',f)
end
else begin
fr:=1;
for i:=2 to n do fr:=fr*i;
Writeln('F=',fr)
end
end.
Тестовые решения:
N=12
F=479001600
N=13
F=6227020800
N=20
F=2.43290200817664E+18
i:integer;
f,n:longint;
fr:real;
begin
Write('N='); Read(n);
if n<=12 then begin
f:=1;
for i:=2 to n do f:=f*i;
Writeln('F=',f)
end
else begin
fr:=1;
for i:=2 to n do fr:=fr*i;
Writeln('F=',fr)
end
end.
Тестовые решения:
N=12
F=479001600
N=13
F=6227020800
N=20
F=2.43290200817664E+18
Похожие вопросы
Предмет: Математика,
автор: risathelilov19
Предмет: Математика,
автор: marta1162
Предмет: Биология,
автор: microsoftg176
Предмет: Химия,
автор: туппой
Предмет: География,
автор: olga26345