Можно поизвращаться с побитовыми операциями

#include "iostream"

using namespace std;

int main () {
int n;
cin >> n;
if (!(n&(n-1))) cout << "YES";
else cout << "NO";
return 0;}

При побитовом "и" происходит перемножение значений (единиц и нулей) соответствующих разрядов в двоичной записи числа. Например, дано число 4. в двоичной сс имеет запись 100; 4 x 3 = 100 x 011 = 0 => 4 - степень 2-ки. Или еще пример, 7, в 2 сс 7 = 111. 7 х 6 = 111 x 110 = 110 = 6. 6 != 0 => 7 не степень 2-ки.