Форум » Обработка целых чисел » 17.(№ 2337) (А. Куканова) » Ответить

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

cabanov.alexey: Программа к абсолютно другому заданию, но не суть. Во втором случае происходит переполнение целочисленной переменной. Нужно использовать longint или BigInteger

Чаговец: У меня ответ не сходится. Где я допустила ошибку? ## 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

Поляков: Чаговец пишет:Где я допустила ошибку? Думаю, что произведение не поместилось в uint64.




полная версия страницы