Преобразовать итерационную функцию в рекурсивную. Проверка на попарное различие цифр в числе - C (СИ)

Узнай цену своей работы

Формулировка задачи:

bool T(int buf){
    bool flag=true;
    while(buf>0 && flag){
        int x=buf%10;
        buf/=10;
        int bufb=buf;
        while(bufb>0 && flag){
            if(x==bufb%10)
                flag=false;
            bufb/=10;
            }
    }
    if(flag)
        return 1;
    return 0;
}
Проверка на попарно различность цифр в числе. Не глупо ли будет создавать массив из цифр числа?
Я гуглил.
Окей, упрощаем до "как задать рекурсию, чтобы она сравнивала значения каждого с каждым элемента массива?"

Решение задачи: «Преобразовать итерационную функцию в рекурсивную. Проверка на попарное различие цифр в числе»

textual
Листинг программы
UniqueDigits(long x)
{
    unsigned short set = 0, temp;
    while(x > 0)
    {
        temp = 1 << (x % 10);
        if (set & temp)
            return 0;
        set |= temp;
        x /= 10;
    }
    return 1;
}

Объяснение кода листинга программы

В данном коде представлена функция UniqueDigits, которая принимает на вход целое число x и проверяет, является ли это число уникальным по своим цифрам (то есть, нет ли в числе двух одинаковых цифр). Внутри функции имеются следующие действия:

  1. Создается переменная типа unsigned short под названием set, которая инициализируется значением 0. Эта переменная будет использоваться для отслеживания уже встреченных цифр.
  2. Создается переменная типа unsigned short под названием temp, которая инициализируется значением 1 << (x % 10). Здесь % используется для получения остатка от деления x на 10 (то есть, мы получаем последнюю цифру числа x). После этого с помощью сдвига вправо (>>) мы устанавливаем в temp значение 1 в соответствующую позицию (если последняя цифра числа x равна 0, то в temp будет установлен ноль, если 1, то единица, если 2, то двойка и т.д.).
  3. Проверяется, есть ли в переменной set значение, установленное в переменной temp. Если да, то это означает, что в числе уже есть такая цифра, и функция возвращает значение 0.
  4. Если в предыдущем шаге не было возврата, то значение temp объединяется с переменной set с помощью оператора |=. Это означает, что в set устанавливается новое значение, равное текущему значению set с добавлением значения temp.
  5. Значение x делится на 10 с помощью оператора /=. Это означает, что мы удаляем последнюю цифру числа x и переходим к следующей.
  6. Если все цифры числа были проверены, то функция возвращает значение 1. Таким образом, данный код проверяет уникальность числа по его цифрам. Если число уникально, то функция возвращает 1, если нет - возвращает 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы