Точная степень двойки (4 варианта)
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае.
Операцией возведения в степень пользоваться нельзя!
Входные данные
Вводится натуральное число.
Выходные данные
Выведите ответ на задачу.
Исходный код на языке C++
#include <iostream>
using namespace std;
template <typename T>
bool is2pow_1(T num) {
bool single = false;
for (int i = 0; i < sizeof(T) * 8; ++i) {
if (num & (1 << i)) {
if (single) {
return false;
}
else {
single = true;
}
}
}
return single;
}
template <typename T>
bool is2pow_2(T num) {
while (num > 1) {
if (num & 1)
return false;
num >>= 1;
}
return true;
}
template <typename T>
bool is2pow_3(T num) {
while (num > 1) {
if (num % 2 != 0)
return false;
num /= 2;
}
return true;
}
template <typename T>
bool is2pow_4(T num) {
if (num > 1) {
if (num & 1)
return false;
return is2pow_4(num >> 1);
}
return true;
}
int main() {
unsigned int n;
cin >> n;
cout << (is2pow_1(n) ? "YES" : "NO") << endl;
cout << (is2pow_2(n) ? "YES" : "NO") << endl;
cout << (is2pow_3(n) ? "YES" : "NO") << endl;
cout << (is2pow_4(n) ? "YES" : "NO") << endl;
system("pause");
return 0;
}