Користувач задає додатне число number, потрібно визначити, чи є воно степенем двійки, і вивести відповідне повідомлення:
- “number is not a power of 2”, якщо number не є степенем двійки.
- “number is 2 to the power of n”, якщо number є n-им степенем двійки.
Необхідно додати цикл після //PUT YOUR CODE HERE.
На розв’язок накладаються обмеження:
- Не можна додавати код перед чи після циклу.
- Цикл не повинен мати вкладених циклів.
#include <iostream>
int main() {
unsigned number;
std::cout << "Enter the number: ";
std::cin >> number;
// PUT YOUR CODE HERE
return 0;
}
Приклад діалогуEnter the number: 1000
1000 is not a power of 2

Відповідь
З умови задачі зрозуміло, що потрібно визначити степінь двійки, а для цього потрібна додаткова змінна (n, щоб відповідати умові задачі). Враховуючи обмеження, потрібно використати цикл for, бо тільки він дозволяє оголошувати змінні (параметри циклу). Змінні, оголошені в тілі циклу, не є корисними в даному випадку, бо вони не зберігають стан між ітераціями (“переоголошуються”). Щоб реалізувати перевірку, потрібна ще одна змінна p — “2 в степені n”. Тут цикл for також є корисним, бо в ньому можна оголошувати більше ніж одну змінну, і мати більше ніж один вираз в кроці циклу.
Логіка циклу наступна:
- Якщо number рівне p, то завершити перевірку. Інакше — перейти до кроку 2.
- Якщо number менше за p, то воно точно не є степенем двійки, потрібно завершити перевірку. Інакше — перейти до кроку 3.
- Збільшити n на 1, а p домножити на 2, перейти до кроку 1.
#include <iostream>
int main() {
unsigned number;
std::cout << "Enter the number: ";
std::cin >> number;
// PUT YOUR CODE HERE
// 1. Оголошуємо n (поточна степінь двійки), та p ("2 в степені n").
// 2. Цикл "нескінченний" (умова true), з циклу виходимо використовуючи break.
// 3. Кроки - збільшити степінь n на 1, і домножити p на 2. Їх завжди можна
// винести в тіло циклу, якщо вони більш складні.
for (unsigned n = 0, p = 1; true; ++n, p *= 2) {
// Потрібно перевірити, чи number є рівним p, і завершити перевірку, якщо так.
if (number == p) {
std::cout << number << " is 2 to the power of " << n << std::endl;
break;
}
// Якщо number менше p, то воно не є степенем 2, бо далі p лише зростатиме.
if (number < p) {
std::cout << number << " is not a power of 2" << std::endl;
break;
}
// number більше p, отже ще може бути рівним якомусь більшому степеню 2.
}
return 0;
}
Добавить комментарий