ИВТ 99 БАЛЛОВ!!!!
Напишите программу в паскале
Даны два БоЛьШуЩиХ ЧиСЛа. Проверьте, делится ли их произведение на девять.
Формат файла входных данных:
В двух строках входного файла даны два целых неотрицательных числа, по одному в строке. Запись каждого из них состоит из не более чем 106 цифр.
Формат файла выходных данных:
В единственной строке выходного файла выведите "YES", если произведение данных чисел делится на девять, и "NO" в противном случае (без кавычек).
Пример:
72
840
YES
3
5
NO
Ограничение по времени : 3 сек
Ограничение по памяти : 256 Мб
Обычная программа по типу перемножить числа и проверить, кратно ли произведение 9 НЕ ПОДХОДИТ
Пожалуйста, учитывайте ограничения по времени и памяти
Answers & Comments
Verified answer
Вычислим остатки от деления обоих чисел на 9, для этого заметив, что у числа 10a + c такой же остаток, что и у a + c. Тогда можно, считывая цифру за цифрой, получить остаток для всего числа. Дальше проверяем, чем равно произведение остатков: если делится на 9, то произведение делится на 9, иначе не делится.function mod9(f: text): integer;
var
c: char;
rem: integer;
begin
rem := 0;
while not eoln(f) do
begin
read(f, c);
rem := (rem + ord(c) - ord('0')) mod 9;
end;
readln(f);
mod9 := rem;
end;
var
f: text;
a: integer;
begin
assign(f, 'input.txt');
reset(f);
a := mod9(f) * mod9(f);
close(f);
assign(f, 'output.txt');
rewrite(f);
writeln(f, a);
if a mod 9 = 0 then
write(f, 'YES')
else
write(f, 'NO');
close(f);
end.