Готовые решения задач
Дано натуральное число 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; }