Вопрос задан 19.12.2025 в 09:11. Предмет Информатика. Спрашивает Новиков Дмитрий.

Написать программу в Паскале: найти все натуральные числа, не превосходящие заданного n, которые делятся на каждую из своих цифр.

Перейти к ответам

Ответы на вопрос

Отвечает Романов Николай.

Как решать: перебираем числа от 1 до n и проверяем каждое — делится ли оно на каждую из своих цифр. Если встречается цифра 0, число сразу не подходит (деление на ноль запрещено).

Ниже рабочая программа на Паскале (Free Pascal / PascalABC.NET):

pascal
program SelfDividingNumbers;

function DivisibleByEachDigit(k: longint): boolean; var t, d: longint; begin t := k; while t > 0 do begin d := t mod 10; { очередная цифра } if (d = 0) or (k mod d <> 0) then begin DivisibleByEachDigit := false; exit; end; t := t div 10; end; DivisibleByEachDigit := true; end;

var n, i: longint; first: boolean; begin readln(n); first := true; for i := 1 to n do if DivisibleByEachDigit(i) then begin if not first then write(' '); write(i); first := false; end; writeln; end.

Пояснения по важным моментам:

  • DivisibleByEachDigit перебирает цифры числа справа налево: берём d := t mod 10, проверяем, что d <> 0 и k mod d = 0. Если нет — возвращаем false.

  • Ноль среди цифр сразу исключает число.

  • Основной цикл идёт от 1 до n, выводя подходящие числа через пробел.

  • Сложность ~ O(n * количество_цифр) (порядка O(n log10 n)), что достаточно для типичных ограничений олимпиадных задач.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос