Страницы

Поиск по вопросам

суббота, 15 февраля 2020 г.

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

#cpp #алгоритм


Задача - найти все натуральные числа, не превосходящие заданное число N и делящиеся
нацело на каждую из своих цифр
Дошел до такого кода:

#include 
using namespace std;


int main()
{
    int n = 0;
    cout << "Enter n: ";
    cin >> n;
    int n1 = n;

    for (int i = 1; i < n; i++) {
        int length = 0;
        while (n != 0) {                    //Узнаем длину числа
            length++;
            n /= 10;
        }
        int *mas = new int[length];
        while (n1 != 0) {
            mas[i] = n1 % 10;               //добавляем цифры числа в массив
            n1 /= 10;
        }

        bool t = true;

        for (int a = 0; a < length; a++) {
            if (i%mas[a] != 0) {
                t = false;                      //проверяем, делится или нет
            }
        }
        if (t == true) {
            cout << i<< " ";
        }


    }

    return 0;
}


Но всё равно не работает. В чём проблема?
    


Ответы

Ответ 1



Как-то уж очень сложно у вас... bool test(int i) { bool dig[9] = {false}; int k = i; while(k) { int d = k%10; k /= 10; if (d == 0 || dig[d-1]) continue; dig[d-1] = true; if (i%d) return false; } return true; } int main(int argc, const char * argv[]) { int N; cin >> N; for(int i = 1; i <= N; ++i) { if (test(i)) cout << i << endl; } } Это если хочется сэкономить на проверках и не проверять дважды одну и ту же цифру, но для реальных чисел это особой роли не играет, так что сократить можно до bool test(int i) { int k = i; while(k) { int d = k%10; k /= 10; if (d && i%d) return false; } return true; }

Комментариев нет:

Отправить комментарий