Предмет: Информатика,
автор: Obstinado
Написать программу на Паскале, которая считает произведение чисел, которые больше введенного числа, до 100. Числа только положительные.
Ответы
Автор ответа:
0
var s: real;
a,x:integer;
begin
writeln('введите целое число');
readln(a);
s := 1;
a := a + 1;
for x := a to 100 {или 99, зависит от того, включается 100 или нет} do begin
s := s * a;
a := a + 1;
end;
writeln(s);
end.
a,x:integer;
begin
writeln('введите целое число');
readln(a);
s := 1;
a := a + 1;
for x := a to 100 {или 99, зависит от того, включается 100 или нет} do begin
s := s * a;
a := a + 1;
end;
writeln(s);
end.
Автор ответа:
0
Вы хоть свою программу тестировали? Попробуйте ввести числа, меньше 85. Ваша программу будет считать неверно, ибо произведение числе от x до 100 достаточно велико и не вмещается ни в один тип, тем более 4-байтовый integer. Мой вариант с длинной арифметикой был верный, а ваш, к сожалению, нет.
Автор ответа:
0
Исправила, спасибо что заметили, сейчас программа выдает значения со степенью. Вроде бы, всё верно.
Автор ответа:
0
Сейчас программа считает верно, но теряется некоторая точность. Хотя не думаю, что автору понадобятся все цифры числа)
Автор ответа:
0
Решение с использование длинной арифметики.
var
i, j, n, len, rem: integer;
a: array[1..200] of byte;
begin
write('Введите число: ');
read(n);
len := 1;
a[1] := 1;
for i := n + 1 to 99 {100} do
begin
for j := 1 to len do
begin
rem := a[j] * i + rem;
a[j] := rem mod 10;
rem := rem div 10;
end;
while rem > 0 do
begin
inc(len);
a[len] := rem mod 10;
rem := rem div 10;
end;
end;
writeln('Произведение чисел из интервала (', n, '; 100): ');
for i := len downto 1 do write(a[i]);
end.
Пример работы программы:
Введите число: 1
Произведение чисел из интервала (1; 100):
1948348720420644788695888257080283249381963823594360049498643927185579338215778728274424636079639781709574621897447185108592230400000000000000000000
var
i, j, n, len, rem: integer;
a: array[1..200] of byte;
begin
write('Введите число: ');
read(n);
len := 1;
a[1] := 1;
for i := n + 1 to 99 {100} do
begin
for j := 1 to len do
begin
rem := a[j] * i + rem;
a[j] := rem mod 10;
rem := rem div 10;
end;
while rem > 0 do
begin
inc(len);
a[len] := rem mod 10;
rem := rem div 10;
end;
end;
writeln('Произведение чисел из интервала (', n, '; 100): ');
for i := len downto 1 do write(a[i]);
end.
Пример работы программы:
Введите число: 1
Произведение чисел из интервала (1; 100):
1948348720420644788695888257080283249381963823594360049498643927185579338215778728274424636079639781709574621897447185108592230400000000000000000000
Автор ответа:
0
Была опечатка в программе, исправил
Похожие вопросы
Предмет: Другие предметы,
автор: jsjsjs93
Предмет: Английский язык,
автор: temir7777
Предмет: Українська мова,
автор: spitsykevych
Предмет: История,
автор: delyukovich
Предмет: Математика,
автор: ritulyaivleva