ИВТ 99 БАЛЛОВ!!!! Напишите программу в паскале Даны два БоЛьШуЩиХ ЧиСЛа. Проверьте, делится ли их произведение на девять. Формат
ИВТ 99 БАЛЛОВ!!!!
Напишите программу в паскале
Даны два БоЛьШуЩиХ ЧиСЛа. Проверьте, делится ли их произведение на девять.
Формат файла входных данных: В двух строках входного файла даны два целых неотрицательных числа, по одному в строке. Запись каждого из них состоит из не более чем 106 цифр.
Формат файла выходных данных: В единственной строке выходного файла выведите "YES", если произведение данных чисел делится на девять, и "NO" в противном случае (без кавычек).
Пример: 72 840
YES
3 5
NO
Ограничение по времени : 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.
Var s:string; i,a:longint; begin readln(s); for i:=1 to length(s) do if (s[i]='-') or (s[i]='*') or (s[i]='/') or (s[i]=',') then inc(a); writeln(a); <span>end.</span>