Проверка на степень двойки
Дано натуральное число N. Вывести слово "YES", если N является числом, которое получается при возведении 2 в какую-либо степень, и слово NO в противном случае.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int N, i=0, J=0;
cin>>N;
while(pow(2.0,i)!=N)
{
J=pow(2.0,i);
i++;
}
if(J==N)
{
cout<<"YES";
}
else if(J!=N)
{
cout<<"NO";
}
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Конечно, ваш код можно попытаться исправить как
int main()
{
int N, i=0, J=0;
cin>>N;
while(pow(2.0,i)<=N)
{
J=pow(2.0,i);
i++;
}
if(J==N)
{
cout<<"YES";
}
else
{
cout<<"NO";
}
}
Но смысла в этом нет. Поскольку, если точно натуральное, т.е. нулем быть не может, то достаточно этого:
unsigned int N;
cin >> N;
cout << (N&(N-1) ? "NO" : "YES");
И вообще, не надо привлекать вычисления с плавающей точкой туда, где нужна целочисленная арифметика.
Намек: степень двойки в бинарной записи имеет вид 0..010..0, словом, с единственной единичкой внутри...