• На обработку поступает натуральное число, не превышающее 10^9. Нужно написать программу, которая выводит на экран произведение цифр числа, кратных 3. Если в числе нет цифр, кратных 3, требуется на экран вывести "NO". Программист написал программу неправильно.
    Напоминание: 0 делится на любое натуральное число.
    Текст написанной программистом программы (с ошибками):
    var N, k, digit, prod: longint;
    begin
    readln(N);
    prod := N mod 10;
    k := 0;
    while (N > 0) do begin
    digit := N mod 10;
    if (digit mod 3 = 0) then begin
    prod := prod*digit;
    k := k+1;
    end;
    N := N div 10;
    end;
    if (k = 0) then
    writeln('NO')
    else
    writeln(N)
    end.
    Найдите все ошибки в этой программе и исправьте их, при этом не меняя весь алгоритм.
    Как правило, ошибок две. Я их нашёл, но задание мне не засчитали. Помогите найти ошибки в программе, из-за которых алгоритм работает неверно!

Ответы 1

  • var N, k, digit, prod: longint;begin  readln(N);  prod := 1; // Произведение не должно быть равно 0, в вашем случае просто отделают последнюю цифру, не проверяя ее кратна она 3 или нет  k := 0;  while (N > 0) do   begin    digit := N mod 10;    if (digit mod 3 = 0) and (digit<>0) then begin // (digit<>0) проверка на неравенство нулю(любое число*0=0)    prod := prod*digit;    k := k+1;    end;    N := N div 10;  end;  if (k = 0)   then writeln('NO')  else writeln(prod) // Выводить нужно не конечное N, а именно произведение(prod)end.
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years