Программа ** с++ Напишите программу, которая вводит натуральные числа а и b и выводит **...

0 голосов
307 просмотров

Программа на с++

Напишите программу, которая вводит натуральные числа а и b и выводит на экран все натуральные числа на отрезке [ a , b ] , делящиеся на каждую из своих цифр.

Входные данные
Входная строка содержит два натуральных числа – значения a и b , разделённых пробелами. Гарантируется, что a ≤ b .

Выходные данные
Программа должна вывести в одну строчку все натуральные числа на отрезке [ a , b ] , делящиеся на каждую из своих цифр. Числа разделяются пробелами.


Информатика (324 баллов) | 307 просмотров
Дан 1 ответ
0 голосов

Можно конечно поизвращаться и придумать интересный алгоритм, но можно просто написать в лоб цикл с проверкой.

#include
int main(){
    int num_1, num_2;
    cin >> num_1 >> num_2;
    for (int i = num_1 + 1; i != num_2; i++) {
        int cur = i, num = i;
        int res = 0;
        while (cur != 0) {
            int mod_n = cur % 10;
            if (mod_n == 0) {
                break;
            }
            if (num % mod_n == 0) {
                res = 1;
            }
            else {
                res = 0;
                break;
            }
            cur /= 10;
        }
        if (res) {
            cout << i << ' ';<br>        }
    }
}

Коротко, в двух словах, о чем тут код. 
мы проходим по циклу от A до B, для каждого числа, в цикле проверяем, делится ли оно на цифры из которых состоит. Для этого мы запоминаем в отдельную переменную cur наше число, и проверяем остаток от деления на 10 (т.е. самую левую цифру), после мы в cur записываем тоже число, но без последней цифры.
на примере 124. проверяем на делимость на 4, потом запоминаем 12, проверяем на делимость на 2, потом запоминаем 1, проверяем на делимость на 1, потом записываем 0. Как только видим 0 прекращаем. 
Дальше в цикле есть проверка на то, что если хоть раз что-то не поделилось, то переходим к след. числу

(1.6k баллов)
0

хм, я только заметил, у тебя же отрезок, а не интервал. ты в цикле for убери +1 к Num_1, а то я писал для интервала

0

и вместо != лучше тогда <= написать

0

Спасибо,все понятно,только что значит cur и res?

0

обычные временные переменные. обычно называют cur(current, текущий) либо tmp(temporary, временный). Вместо res(result) лучше бы использовать булевский флаг (bool flag) но это не принципиально

0

Вообще хорошим тоном является присваивание каждой переменной какого-либо значащего имени. Чтобы было понятно, хотя бы в общих чертах, что происходит в коде, человеку не знакомому с условием задачи.

0

Спасибо за объяснение

0

т.е. если есть остаток от деления числа N. то и название переменной будет что-то вроде div_n, mod_n и.д.

0

да не за что