C/C++

Даны два целых числа. Вывести ответ является ли максимальное число степенью 2

Azimbay Ismailov
Azimbay Ismailov
202
int a, b;
cin >> a >> b;
a = abs(max(a, b));
cout << (a & (a - 1) ? 'no' : 'yes');
ДБ
Дмитрий Бычек
59 740
Лучший ответ
Azimbay Ismailov Можно пожалуйста последнюю строчку подробнее расписать?
Иван Петряков Это тернарный оператор, можете в интернете почитать про него. Код, кстати, неправильный - только что проверил.
Ну уж нет! Здесь самое толковое решение - как раз воспользоваться кое-чем из алгоритмических трюков!
Вот только с побитовой операцией x&(x-1) x=0 тоже окажется степенью двойки. В некотором смысле это верно:
lim(n→-∞) 2ⁿ = 0.
То есть 0 как бы минус бесконечная степень двойки. Но это уж автору вопроса решать - включать 0 в степени двойки или нет. Я за то, чтобы включать! У этого странного Андрея ещё стоит какой-то дурацкий abs. А это уже полная профанация. Так и минус два как наибольшее из двух введённых чисел окажется степенью двойки. Да и задание тоже странное - какой степенью двойки? 10 тоже два в степени lb10. Вот и надо было сказать, что целой степени двойки, а ни какой попало!
#include <iostream>
using namespace std; int main()
{ long long a, b; cout << "a b : "; cin >> a >> b; a = max(a, b); if (a < 0) cout << "no\n"; else if (a & (a - 1)) cout << "no\n"; else cout << "yes\n"; return 0; }
АО
Азиз Оморов
29 440
/*
Вот альтернативная версия. Не так изящно, как у Андрея - я запрограммировал по-крестьянски :)
*/

using namespace std;

int max(int a, int b) { return (a < b) ? b : a; }

void main(){
int a, b;
cin >> a >> b;
a = fabs(max(a, b));
if(!b) cout << "no";
else cout << ((int)log2(a) == log2(a) ? "yes" : "no");
_getch();
}
Денис Новиков
Денис Новиков
2 737

Похожие вопросы