> Как реализовать проверку кратности с остатком от деления в JavaScript (JavaScript)

Уровень: middle · Роль: frontend · Категория: Технические вопросы

Компании: ITQ Group МКБ БАНК

Стек: JavaScript

> Пример ответа

Короткий ответ

Проверка кратности в JavaScript выполняется через оператор % (remainder), который возвращает остаток от деления. Число a кратно b, если a % b === 0. Важно учитывать знак делимого: для отрицательных чисел остаток может быть отрицательным, поэтому надёжнее использовать Math.abs(a) % b === 0 или проверять a % b === 0 с учётом того, что -6 % 3 даёт -0, что строго равно 0.

Подробное объяснение

Оператор % в JavaScript работает как remainder, а не modulo. Разница проявляется при отрицательных значениях: -7 % 3 вернёт -1, тогда как математическое modulo дало бы 2. Для проверки кратности это не критично, если делитель положительный - остаток будет 0 только когда число действительно кратно. Однако если делитель тоже отрицательный, результат может быть неочевидным.

На практике для проверки кратности обычно используют:

JAVASCRIPT
function isMultiple(n, divisor) {
return n % divisor === 0;
}

Если нужно обрабатывать отрицательные делители или гарантировать неотрицательный остаток, применяют Math.abs(n) % Math.abs(divisor) === 0.

Также стоит помнить про деление на ноль: n % 0 вернёт NaN, поэтому нужно явно проверять делитель.

На практике

В реальных задачах кратность используется для:

  • фильтрации элементов по индексу (например, каждый третий);
  • циклических операций (карусели, слайдеры);
  • проверки чётности (n % 2 === 0);
  • работы с сетками и раскладками (колонки, ряды).

Для больших чисел (за пределами Number.MAX_SAFE_INTEGER) обычный % может давать неточные результаты - тогда используют BigInt с оператором % для bigint типов.

Пример кода

JAVASCRIPT
// Базовая проверка
const isEven = (n) => n % 2 === 0;
// С защитой от отрицательных значений
const isMultiple = (n, d) => d !== 0 && Math.abs(n) % Math.abs(d) === 0;
// Для BigInt
const isMultipleBig = (n, d) => d !== 0n && n % d === 0n;
// Пример использования
console.log(isMultiple(9, 3)); // true
console.log(isMultiple(-9, 3)); // true
console.log(isMultiple(10, 3)); // false
console.log(isMultiple(7, 0)); // false (защита от NaN)

Как отвечать на собеседовании

Начните с оператора % и простого примера. Затем упомяните нюанс с отрицательными числами и делением на ноль. Если спросят про производительность - скажите, что % работает за O(1) и не требует оптимизаций. Для больших чисел предложите BigInt. Покажите, что понимаете разницу между remainder и modulo - это часто проверяют.

Что проверяет интервьюер

  • знание базового оператора %;
  • понимание edge cases (ноль, отрицательные числа, NaN);
  • умение писать чистую функцию с валидацией;
  • осведомлённость о BigInt для больших чисел;
  • способность объяснить разницу между remainder и modulo.

Типичные ошибки

  • забывают про деление на ноль - получают NaN вместо false;
  • не учитывают отрицательные числа - для -9 % 3 результат -0, но -9 % 2 даст -1, что ломает логику, если проверять === 0 без Math.abs;
  • используют % для чисел больше Number.MAX_SAFE_INTEGER - получают неточный результат;
  • путают remainder и modulo, ожидая неотрицательный остаток всегда;
  • не проверяют тип аргументов - если передать строку, % приведёт её к числу, но это может быть неожиданно.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью