Автор | Сообщение |
|
Отправлено: 19.12.20 21:44. Заголовок: 17.(№ 2337) (А. Куканова)
Задание:Рассматривается множество целых чисел, принадлежащих числовому отрезку [1985; 8528], которые удовлетворяют следующим условиям: − сумма последних двух цифр равна 6; − не кратны 2, 7 и 47. Вопрос: Почему программа представленная ниже выдает правильный ответ, когда в r(произведение чисел) пишем mod 1000. Почему нельзя написать это в writeln? Правильная программа:var r,max,i: integer; begin max:=1985; r:=1; for i:=1985 to 8528 do begin if (((i mod 10) + (i mod 100)div 10=6)) then if (i mod 2 <>0) and ( i mod 7 <>0) and (i mod 47<>0) then begin r:=(i*r)mod 1000 ; if i>max then max:=i; end; end; writeln(max,' ',r); end. Ответ:8515 125(верно) Неправильная( ответ 8515 701) var r,max,i: integer; begin max:=1985; r:=1; for i:=1985 to 8528 do begin if (((i mod 10) + (i mod 100)div 10=6)) then if (i mod 2 <>0) and ( i mod 7 <>0) and (i mod 47<>0) then begin r:=(i*r) ; if i>max then max:=i; end; end; writeln(max,' ',r mod 1000); end.
|
|
|
Ответов - 3
[только новые]
|
|
|
Отправлено: 20.12.20 08:28. Заголовок: Программа к абсолютн..
Программа к абсолютно другому заданию, но не суть. Во втором случае происходит переполнение целочисленной переменной. Нужно использовать longint или BigInteger
|
|
|
|
Отправлено: 06.01.21 17:35. Заголовок: Задача 17.48
У меня ответ не сходится. Где я допустила ошибку? ## var s:=range(1985,8528).Where(i->(i mod 10 + i mod 100 div 10 =6)and not(i.DivsAny(2,7,47))); var p:uint64; p:=s.Product; print(s.Max,p mod 1000); //8515 573
|
|
|
|
| Администратор
|
Сообщение: 2285
|
|
Отправлено: 07.01.21 20:25. Заголовок: Чаговец пишет:Где я ..
Чаговец пишет: Думаю, что произведение не поместилось в uint64.
|
|
|
|