Найти в Дзене
Иван

Решаем задачи по Java. Задача №2.

Доброго времени суток! Надеюсь подкрадывающаяся вторая волна коронавируса не слишком сильно ударила по вам и с первой задачей всё понятно. Если нет, пишите в комментариях. А сегодня мы познакомимся с двумя отличными методами и с их помощью решим очередную задачку. Итак, встречайте: Math.abs() и Integer.bitCount. Далеко ходить не будем, задача: Реализуйте метод isPowerOfTwo, проверяющий, является ли заданное число по абсолютной величине степенью двойки: На самом деле, решений тут несколько. Например: Я разберу здесь самый, наверное, удобный, первый вариант. А именно применив методы Math.abs(); и Integer.bitCount. Пойдем по порядку Для начала нужно понять, что такое абсолютная величина числа. Вот вам немного теории на эту тему. Если по простому: это число с убранным знаком "+" или "-". Но лучше почитайте... Далее В каких случаях число может быть степенью числа 2. Если не углубляться в математику, то: У всех чисел степеней двойки, в двоичной системе счисления, одна единица.
Оглавление

Доброго времени суток!

Надеюсь подкрадывающаяся вторая волна коронавируса не слишком сильно ударила по вам и с первой задачей всё понятно. Если нет, пишите в комментариях.

А сегодня мы познакомимся с двумя отличными методами и с их помощью решим очередную задачку.

Итак, встречайте: Math.abs() и Integer.bitCount.

Далеко ходить не будем, задача:

Реализуйте метод isPowerOfTwo, проверяющий, является ли заданное число по абсолютной величине степенью двойки:

-2

На самом деле, решений тут несколько. Например:

  • Воспользовавшись вышеуказанными методами.
  • Использовать двоичную арифметику.
  • Написать несколько циклов и условных операторов.

Я разберу здесь самый, наверное, удобный, первый вариант. А именно применив методы Math.abs(); и Integer.bitCount.

Пойдем по порядку

Для начала нужно понять, что такое абсолютная величина числа. Вот вам немного теории на эту тему. Если по простому: это число с убранным знаком "+" или "-". Но лучше почитайте...

Далее

В каких случаях число может быть степенью числа 2. Если не углубляться в математику, то:

У всех чисел степеней двойки, в двоичной системе счисления, одна единица.

Вот немного об этом. Здесь тоже можно залезть очень глубоко, но не перестарайтесь.

По итогу

Мы должны вычислить абсолютную величину переданного числа, затем проверить его на степень двойки и вернуть булевское значение: true или false.

С первым нам поможет метод Math.abs(). Он возвращает модуль числа. Вот статейка о том, как он работает.

Вторым действием используем метод Integer.bitCount. Лучше этого малого вряд ли кто расскажет про него. По сути метод возвращает количество единиц из двоичной системы исчисления. А как мы помним, у всех чисел степеней двойки, это количество будет равным одному.

Соответственно, делаем проверку, если метод вернул "1", значит true, если любое другое число - false. Не забываем, передавать значение в bitCont, нужно абсолютное, а не то, которое было передано в метод.

-3

Пишите свои варианты решений в комментариях, тут можно очень многими способами извернуться. Интересно было бы посмотреть на ваши решения.

Всем удачи!