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