Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Заменить последнюю единицу в двоичной записи числа на ноль

#математика


Собственно, задача в условии. 
7->6 (так как 111 - 110)
6->4 (110 - 100)
5->4 (101 - 100)

Проблема в том, что нельзя юзать строки, циклы и ветвления(с этим задача становится
элементарной). 
Только арифметику и битовую арифметику.

Просьба подсказать в каком направлении копать.
Самостоятельно удалось решить только для частных случаев, либо с использованием запрещенных
элементов (типа поиска последнего вхождения подстроки или цикла смещения)    


Ответы

Ответ 1



@knes пример из учебника a = a & (a - 1);

Ответ 2



Если использовать битовую арифметику, все элементарно: x = x & ~1;

Ответ 3



Задача на самом то деле простая: Надо просто логически поразмыслить: Если число в двоичной записи заканчивается на 0, значит число четное (и обратно) Если число в двоичной записи заканчивается на 1, значит оно нечетное (и обратно) Чтобы заменить последнюю цифру с 1 на 0 надо просто отнять 1 То есть в Java псевдокоде: int replaceLastOne(int number) { if(number%2==1) return number-1; else return number; }

Комментариев нет:

Отправить комментарий