Определить, состоит ли число только из разных цифр - C (СИ)
Формулировка задачи:
Решение задачи: «Определить, состоит ли число только из разных цифр»
int AreAllDigitsDifferent(unsigned n, unsigned digitMask/* = 0*/) { const unsigned digitBit = 1 << (n % 10); return n == 0 || !(digitMask & digitBit) && AreAllDigitsDifferent(n / 10, digitMask | digitBit); }
Объяснение кода листинга программы
В данном коде функция AreAllDigitsDifferent
проверяет, состоит ли число из разных цифр. Функция принимает два параметра: n
— число, которое необходимо проверить, и digitMask
— переменная, которая используется для хранения информации о том, какие цифры уже были проверены.
Сначала функция вычисляет, какая цифра находится на позиции n % 10
(остаток от деления n
на 10). Затем она проверяет, является ли digitMask
равным нулю, что означает, что все цифры уже были проверены. Если это не так, то функция проверяет, содержит ли digitMask
бит, соответствующий текущей цифре (это делается с помощью оператора &
). Если бит не содержит, то это означает, что текущая цифра не была проверена, и функция вызывает саму себя для оставшейся части числа (полученной путем деления n
на 10) и нового значения digitMask
, которое содержит бит текущей цифры.
Если бит содержит, то это означает, что текущая цифра уже была проверена. В этом случае функция возвращает true
, если n
равно нулю, и false
в противном случае.
Список действий:
- Вычисляем
digitBit
как 1 << (n % 10). - Проверяем, является ли
digitMask
равным нулю. - Если
digitMask
не равен нулю, то проверяем, содержит лиdigitMask
бит, соответствующий текущей цифре (это делается с помощью оператора&
). - Если бит не содержит, то вызываем функцию
AreAllDigitsDifferent
для оставшейся части числа и нового значенияdigitMask
. - Если бит содержит, то проверяем, равно ли
n
нулю. - Возвращаем
true
, еслиn
равно нулю, иfalse
в противном случае.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д