Давайте разберем каждую задачу по порядку и составим решение на языке 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 определяет, делится ли число на каждую свою ненулевую цифру.
- В основной программе происходит ввод интервала, проверка его корректности, подсчет подходящих чисел и вывод результата.
Если нужно уточнить или дополнить решение, я готов помочь!