На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 42
ссылка на сообщение  Отправлено: 21.10.20 11:01. Заголовок: ege17 № 47 PascalABC


Здравствуйте.
В условии задачи надо найти произведение. В Python это делается в "лоб", т.к. нет ограничений по длине числа (например так):
k,mi=0,9415
p=1
for i in range(2057,9414+1):
s=i%10+i//10%10
if s!=5 and i%4!=0 and i%5!=0 and i%41!=0:
p*=i
if i<mi:
mi=i
print(mi,p%1000)
Получаем нужный ответ: 2057 192
А вот как быть тем, кто учится программировать на PascalABC :
var
mi,rez: integer;
p:double;

begin
p := 1;
for var i := 9414 downto 2055 do
begin
if ((i mod 10)+ (i mod 100 div 10))<>5 then
if (i mod 4<>0) and (i mod 5 <>0) and (i mod 41 <>0) then
begin
p:=p*i;
writeln(p);
mi := i
end;
end;
rez:=(trunc(p)) mod 1000;
writeln(mi,' ',rez);
end.
Результат (фрагмент):
2.67271080942943E+306
8.0181324282883E+306
1.60362648565766E+307
1.60362648565766E+307
1.44326383709189E+308





Какой математический алгоритм нужно применить, чтобы получить ответ?
Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]


Администратор




Сообщение: 2105
ссылка на сообщение  Отправлено: 21.10.20 18:23. Заголовок: Антонина пишет: Како..


Антонина пишет:
 цитата:
Какой математический алгоритм нужно применить, чтобы получить ответ?

Проблема в том, что при вычислениях получается очень большое число. Но нам нужны только три его последние цифры. Выход такой: заменить p:=p*i; на p:=(p*i) mod 1000;.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 43
ссылка на сообщение  Отправлено: 21.10.20 19:41. Заголовок: Спасибо огромное. Мо..


Спасибо огромное. Моя ошибка была в следующем:
p:=p * (i mod 1000); {пробовала так}

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1750
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет