int a, b;
cin >> a >> b;
a = abs(max(a, b));
cout << (a & (a - 1) ? 'no' : 'yes');
C/C++
Даны два целых числа. Вывести ответ является ли максимальное число степенью 2
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; }
Вот только с побитовой операцией 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; }
/*
Вот альтернативная версия. Не так изящно, как у Андрея - я запрограммировал по-крестьянски :)
*/
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();
}
Вот альтернативная версия. Не так изящно, как у Андрея - я запрограммировал по-крестьянски :)
*/
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();
}
Похожие вопросы
- С++ Максимум трёх чисел Даны три целых числа. Найдите наибольшее из них (программа должна вывести ровно одно целое число
- Дана матрица целых чисел 8×8. Найти количество простых чисел в этой матрице
- Найти произведение элементов массива а, состоящего из 25 целых чисел, кратных 2 на Паскаль
- Даны число N и последовательность из N целых чисел. Найти количество и сумму тех чисел, которые нечетны и положительны.
- Дана непустая последовательность целых чисел, среди которых есть два нуля. Найти сумму чисел, расположенных между ними.
- Даны действительные положительные числа на С++
- В LINUX OS Написать программу, которая из командной строки получает целое число N и некоторый текст “Text”.
- Задан одномерный массив целых чисел создать код на C++
- Напишите рекурсивную функцию, которая принимает двухмерный массив целых чисел и количество сдвигов и выполняет
- Рекурс.функцию, которая принимает 2х-мерный массив целых чисел и кол-во сдвигов и выполняет круговой сдвиг массива влево