Страницы

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

среда, 24 апреля 2019 г.

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

Задача - найти все натуральные числа, не превосходящие заданное число 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; }
Но всё равно не работает. В чём проблема?


Ответ

Как-то уж очень сложно у вас...
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; }

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

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