Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3159556
А
Аноним
30 апреля 2025 17:49 · публичный вопрос
А
Аноним

Описать функцию bool IsCorrect(int n1, int n2) для определения, является ли введенный пользователем интервал корректным. Описать функцию bool IsDivOnDigit(int n) для определения,…

Запрос пользователя

Описать функцию bool IsCorrect(int n1, int n2) для определения, является ли введенный пользователем интервал корректным. Описать функцию bool IsDivOnDigit(int n) для определения, делится ли число на каждую свою цифру. Решить задачу с использованием разработанных функций: сколько чисел на интервале [а, b] делятся на каждую свою цифру? Язык С++. Консоль. Windows

Ответ нейросети
30 апреля 2025 17:49

Давайте разберем каждую задачу по порядку и составим решение на языке C++.

Задача 1: определить, является ли интервал корректным

Предположим, что под «корректным интервалом» понимается интервал вида [n1, n2], где n1 ≤ n2. Тогда функция IsCorrect должна возвращать true, если интервал корректен, и false — иначе.

bool IsCorrect(int n1, int n2) {
    return n1 <= n2;
}

Задача 2: определить, делится ли число на каждую свою цифру

Здесь нужно проверить, делится ли число на каждую из его ненулевых цифр.

bool IsDivOnDigit(int n) {
    int temp = n;
    while (temp > 0) {
        int digit = temp % 10; // выделяем последнюю цифру
        if (digit == 0 || n % digit != 0) {
            return false; // если цифра 0 или число не делится на эту цифру
        }
        temp /= 10; // удаляем последнюю цифру
    }
    return true;
}

Обратите внимание, что при разборе цифр нужно игнорировать нулевые цифры, потому что деление на ноль невозможно.

Задача 3: посчитать, сколько чисел на интервале [a, b] делятся на каждую свою цифру

Здесь нужно перебирать числа на интервале [a, b], проверять каждое число с помощью функции IsDivOnDigit, и считать подходящие.

#include <iostream>
using namespace std;

bool IsCorrect(int n1, int n2) {
    return n1 <= n2;
}

bool IsDivOnDigit(int n) {
    int temp = n;
    while (temp > 0) {
        int digit = temp % 10;
        if (digit == 0 || n % digit != 0) {
            return false;
        }
        temp /= 10;
    }
    return true;
}

int main() {
    int a, b;
    cout << "Введите интервал [a, b]: ";
    cin >> a >> b;

    if (!IsCorrect(a, b)) {
        cout << "Некорректный интервал." << endl;
        return 1;
    }

    int count = 0;
    for (int num = a; num <= b; ++num) {
        if (IsDivOnDigit(num)) {
            ++count;
        }
    }

    cout << "Количество чисел на интервале [" << a << ", " << b << "], делящихся на каждую свою цифру: " << count << endl;

    return 0;
}

Итоги

  • Функция IsCorrect проверяет, правильный ли интервал.
  • Функция IsDivOnDigit определяет, делится ли число на каждую свою ненулевую цифру.
  • В основной программе происходит ввод интервала, проверка его корректности, подсчет подходящих чисел и вывод результата.

Если нужно уточнить или дополнить решение, я готов помочь!