ИВТ 99 БАЛЛОВ!!!! Напишите программу в паскале Даны два БоЛьШуЩиХ ЧиСЛа. Проверьте,...

0 голосов
71 просмотров

ИВТ 99 БАЛЛОВ!!!!

Напишите программу в паскале

Даны два БоЛьШуЩиХ ЧиСЛа. Проверьте, делится ли их произведение на девять.

Формат файла входных данных:
В двух строках входного файла даны два целых неотрицательных числа, по одному в строке. Запись каждого из них состоит из не более чем 106 цифр.

Формат файла выходных данных:
В единственной строке выходного файла выведите "YES", если произведение данных чисел делится на девять, и "NO" в противном случае (без кавычек).

Пример:
72
840

YES

3
5

NO

Ограничение по времени : 3 сек
Ограничение по памяти : 256 Мб

Обычная программа по типу перемножить числа и проверить, кратно ли произведение 9 НЕ ПОДХОДИТ
Пожалуйста, учитывайте ограничения по времени и памяти


Информатика (334 баллов) | 71 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Вычислим остатки от деления обоих чисел на 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.

(148k баллов)