Регистрация
Войти
Стать экспертом Правила
Информатика

ИВТ 99 поинтов!!!!Напишите программу в паскалеДаны два БоЛьШуЩиХ ЧиСЛа. Проверьте, делится ли их произведение на девять.Формат файла входных данных:В двух строках входного файла даны два целых неотрицательных числа, по одному в строке. Запись каждого из них состоит из не более чем 106 цифр.Формат файла выходных данных:В единственной строке выходного файла выведите "YES", если произведение данных чисел делится на девять, и "NO" в противном случае (без кавычек).Пример:72840YES35NOОграничение по времени : 3 секОграничение по памяти : 256 МбОбычная программа по типу перемножить числа и проверить, кратно ли произведение 9 НЕ ПОДХОДИТПожалуйста, учитывайте ограничения по времени и памяти

ОТВЕТЫ
Вычислим остатки от деления обоих чисел на 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.
122
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам