1. Си / Говнокод #10005

    +128

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    Unsigned long int getset (void)
    {unsigned long int a; int k; h=0;
    While (‘<не конец файла>==<читать число в k>’);
    {switch k
    {case 1: h = h/0x 0001; break;
    case 2: h = h/0x 0002; break;
    case 3: h = h/0x 4; break;
    case 4: h = h/0x 8; break;
    case 5: h = h/0x 10; break;
    case 6: h = h/0x 20; break;
    case 7: h = h/0x 40; break;
    case 8: h = h/0x 80; break;
    …
    case 30: h = h/0x 2000 0000; break;
    case 31: h = h/0x 4000 0000; (- 1 на 31 месте) break;
    case 32: h = h/0x 8000 0000; (- 1 на 32 месте) break;
    }
    }
    return (h)
    }

    Мне кажется или весь смысл сводиться к h = h/2^(k-1)

    Запостил: ApeNN, 21 Апреля 2012

    Комментарии (11) RSS

    • Круто, чувак реализовал битовый сдвиг вправо своими силами
      Ответить
      • Если бы "чувак"... Это нам препод показал "как надо делать"!!!
        Ответить
      • и, кстати, это битовый сдвиг влево (тут же деление)
        Ответить
        • И кстати принято считать, что деление это сдвиг вправо, а умножение - влево.
          Ответить
          • деления в сдвиги должен преобразовывать кодогенератор, а не кульхацкер который застрял между креслом и клавиатурой
            Ответить
        • это сдвиг вправо

          кстати почему капча по-прежнему из 4 цифр? уже ж из 4 цифр вышли
          Ответить
          • Даешь капчу, совпадающую с номером комментируемого гк!
            Ответить
    • Да, а код всегда выводит 0, т.к. h=0 и дальше его никто не менял :)
      Ответить
      • Да тут вообще код написан от руки явно и местами на пальцах
        Ответить
        • А имелось в виду поди че-то такое? Чтобы читать множества из чисел 1..32.

          unsigned long getSet()
          {
              unsigned long r = 0;
              while (1) {
                  int k;
                  if (scanf("%d", &k) == -1)
                      break;
                  r |= 1 << (k-1);
              }
              return r;
          }
          Ответить

    Добавить комментарий