На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> последняя единица
    Есть задачка
    Заменить последнию единицу в двоичном представлении числа на 0
    число INT
    для 45 101101
    ответ 101100.

    всебы ничего но 1 условие, блин. Не используя циклов!

    у меня только рекурсией получилось, может можно как по другому.
    if if if тоже глупо...
      и так для каждого, бита пока на 1 не упрусь  >:(
      вот тебе и цикл.
        если б первую... :)
        А так -- пока вижу только 1) развернуть цикл или 2) спрятать его в рекурсию :)
          1:
          int chislo = 45;
          chislo &= 0xfffffffe;

          2:
          int chislo = 45;
          if( chislo \% 2 )chislo--;
            у меня получилось!

            скину решение, на днях, может кто подумать хочет :)

            красивое решение :) всего несколько операций
              Нафига там рекурсия?
                2WinterMute

                не нето, надо не только для 45

                45 - 44
                1024 - 0
                1025 - 1024
                  Пришлось подумать :)

                  c = с & !(!c+1) :)
                  Сообщение отредактировано: Visitor -
                    2Visitor
                    круто :)

                    но ты наверное хотел
                    с = с & ~(-c)  :)

                    мое решение

                    с = с - ( с & ( -с ) )

                    на 1 с больше :(

                    а с первой тоже неплохая задачка :) надо подумать  >:(
                      ну да, сорри, ~, пойду Си вспоминать :)
                        Цитата
                        если б первую...  


                        Почему, это вызвало такую легкость ? Не могу найти решения :-/
                          С певой там немного другие операции, не битовые :) Логарифм.
                            WinterMute уже ответил:
                            INT ClearLeastBit(INT value) {
                              return value & (int)-2;
                            }
                            Неверящие могут проверять :D
                            Сообщение отредактировано: trainer -
                              2 trainer
                              ExpandedWrap disabled
                                <br> 101001010111<br>=<br> 101001010110<br><br><br><br> 010101110000<br>=<br> 010101100000<br><br><br><br> 101100101000<br>=<br> 101100100000<br><br><br><br> 110100101010<br>=<br> 110100101000<br>


                              я понятно объяснил ?
                              Сообщение отредактировано: Sazabis -
                                Дык не разряд последний, а единицу последнюю. И еще в условии забыли слово "только" :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0695 ]   [ 15 queries used ]   [ Generated: 21.05.24, 07:12 GMT ]