#cpp #алгоритм
Задача - найти все натуральные числа, не превосходящие заданное число N и делящиеся нацело на каждую из своих цифр Дошел до такого кода: #includeusing 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; }
Комментариев нет:
Отправить комментарий