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

          можно примерчик для например числа 13?

          -Added
          Цитата andriano @
          Если по степеням 2, то битовыми проверками и сдвигами.

          именно по минус 2
            13
            ExpandedWrap disabled
              div  mod
              -6   1
              3    0
              -1   1
              1    1
              0    1

            остатки снизу вверх записываем
            11101
            Сообщение отредактировано: MBo -
              если на пасе, то

              ExpandedWrap disabled
                n:=13;
                 
                repeat
                writeln(n mod -2);
                n:=n div -2;
                 
                until n=0;


              выдает

              1
              0
              1
              -1
                В паскале mod возвращает результат со знаком равным знаку первого операнда. А тебе нужен mod, возвращающий только неотрицательные остатки.
                  ихдежеговзять? не хочется лепить кучу условий (если это минус, а это плюс , то ... и т.д.)

                  для 2345 ответ моего 0-кода еще страшнее:

                  1
                  0
                  0
                  -1
                  0
                  -1
                  0
                  0
                  1
                  0
                  0
                  -1

                  Правильный ответ: 1100101111001
                    Цитата darcus @
                    ихдежеговзять?
                    Написать :blink: Там же всего одна строчка.
                    ExpandedWrap disabled
                      function modNeg2(a: integer): integer;
                      begin
                        modNeg2 := abs(a mod (-2));
                      end;
                    Аналогично "исправляем" div, так как теперь перестало выполнятся тождество (a div b)*b + (a mod b) = a
                      сенькс однозначно. Получилось типа так:
                      Ответ собираем в строку s (и в нужном порядке):

                      ExpandedWrap disabled
                        def roo(n):
                            if n==0:
                                return '0'
                            s=''
                            while n!=0:
                                m=n%-2
                                n=n/-2
                                if m==0:
                                    s='0'+s
                                else:
                                    s='1'+s
                                    if m==-1:
                                        n=n+1
                            return s
                         
                        print roo(input())
                      Сообщение отредактировано: darcus -
                        Ё моё, подробности: задача сводится к изменению системы исчисления из десятичной в двоичную.
                        Решено-перерешено.
                          только основание системы счисления < 0
                            Реализация на С#:
                            ****************************************
                            int m=77855442;
                            Console.WriteLine(Convert.ToString(m,2));
                            ****************************************
                            выдает типа 100101000111111101011010010
                            press any key......

                            и никаких тебе условий......
                              kiryshka, ну хотя бы заголовок темы нужно читать :wall:
                              Основание (-2).
                                да какая разница? остаток от деления что на -2, что на 2 один и тот же.....(если не учитывать отрицательный результат)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0416 ]   [ 15 queries used ]   [ Generated: 17.03.25, 08:50 GMT ]