C/C++

Программа делится ли число на 3 6 9 без остатка на с++

Привет всем, помогите написать программу на С++, который будет показывать делится ли число на 3,6,9.
Например: Написал 27, и ответ был такой - Число 27 делится на 9 и на 3 . Но не делится на 6. Если не сложно, помогите.
#include <iostream>
using namespace std;
int gcd(int a, int b) {
a = abs(a);
b = abs(b);
if (!b) return a;
return gcd(b, a % b);
}
int lcm(int a, int b) {
return abs(a * b) / gcd(a, b);
}
int main() {
system("chcp 1251 > nul");
int number;
while (true) {
cout << "Целое число: ";
cin >> number;
if (gcd(number, 3) != 1) {
cout << "Число " << number << " делится на 3";
auto x6 = lcm(number, 6) == number;
auto x9 = lcm(number, 9) == number;
if (x6 && !x9) cout << " и 6. Но не делится на 9";
else if (!x6 && x9) cout << " и 9. Но не делится на 6";
else if (x6 && x9) cout << ", 6 и 9";
else cout << ". Но не делится на 6 и 9";
puts(".");
} else cout << "Число " << number << " не делится на 3, 6 и 9.\n";
}
system("pause > nul");
}
Михаил Кошин
Михаил Кошин
95 741
Лучший ответ
Макс Сидельников Спасибо!) Все работае)
Григорий Григорьев Глубокоуважаемый, не кажется ли Вам, что условие первого ветвления чересчур расточительно? Ведь число 3 является делителем и для 6, и для 9. Ясно, что числа, не кратные 3, не делятся ни на 6, ни на 9.
Григорий Григорьев ...Но, конечно, респект, что Вы постарались следовать примеру.
Камил, каюсь, по-видимому к зиме я становлюсь тугодумом, и озарение приходит ко мне слишком поздно.

Только в тяжелом сне до меня дошло, что идея, использовать массив, была верной, однако, нужно не брать из него делители, а заполнять его: ДЕЛИТЕЛИ ПОМЕЩАТЬ, НАЧИНАЯ ОТ ЕГО НАЧАЛА, ОСТАЛЬНОЕ — ОТ КОНЦА, и считать количество, например, делителей. Тогда и процесс сравнения, и вывод получаются предельно простыми и лаконичными.

Надеюсь, что эта информация будет полезной Вам при решении других задач.

Всего доброго.
Андрей Рябов
Андрей Рябов
16 172

Похожие вопросы