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

    +139

    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
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    int main() {
      unsigned long oct;
      int m,n,i,j;	
      int max=0;
      
      scanf("%d",&oct);
      for(i=0;i<=32/3;i++) {
        m=0;
        for(j=0;j<=2;j++) {
          n=oct & 1;
          if(n==1)
            m=m | power(2,j);
          oct=oct >> 1;  
        } 
      if(m>max)
        max=m;                   
      }
      printf("%d",max);  
      return 0;
    }
    
    int power(int x, int a) {
      int i;
      int t=x;
      if(a==0)
        t=1;
      else {  
      for(i=1;i<a;i++)
        t*=x; 
      }
      return t;  
    }

    Определение максимальной цифры в восьмеричной записи числа.
    Особенно радует вызов функции возведения в степень для двойки, да и сама функция тоже.

    Запостил: movaxbx, 11 Июня 2010

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

    • Тоесть с одной стороны человек как бы знает про сдвиги, а с другой -- возводит в степень как абизянка
      Ответить
      • Автор смотрит в будущее. Сегодня там int, а завтра нужно будет double, почти ничего переписывать не придется.
        Ответить
    • while (oct) {
        n = oct & 7;
        oct >>= 3;
        if (n > max) max = n;
      }
      Ответить
      • в условие цикла еще можно max<7 добавить
        Ответить
        • Или отдельный иф с брейком добавить после присвоения нового макс.
          Ответить
    • >>>Особенно радует вызов функции возведения в степень для двойки, да и сама функция тоже.

      +1, злой паря, видел такой мастерский подход к работе с битами неоднократно
      блин ну создайте массив степеней двойки если так надо - гораздо ведь быстрее получается, а он еще и цикл для возведения затулил
      Ответить
      • >>>блин ну создайте массив степеней двойки если так надо

        Это что, шутка?

        Кэп бы сделал вот так:
        <pre>
        private static int pow2(int n) {
        return 1 << n;
        }
        </pre>
        Ответить
    • показать все, что скрытоНенавижу явовский кодестайл на брекеты, код мешаниной становится
      Ответить
      • Зато в Яве, в отличии от многих других языков, хотя бы есть код-стайл.

        К скобке на строке быстро привыкаешь: через пол года Вам уже будет казаться мешаниной код со скоброй на другой строке
        Ответить
      • тащемта это не явовский стайл, а самый что ни на есть сишный - стиль Кернигана и Ритчи
        Ответить
        • Откуда вебкилу знать K&R? Ни в VB ни в PHP он с ними не сталкивался
          Ответить
          • В K&R следует открывающую скобку функции, в отличие от остальных конструктов, писать на след. строке:

            int power(int x, int a)
            {


            А сабж использует именно что явовский кодестайл:

            int power(int x, int a) {


            Откуда вам с мистером Хэнки знать о K&R...

            Мне оба не нравятся. Лучший, имхо, -- АНСИ-стиль.
            Ответить
            • >>В K&R следует открывающую скобку функции, в отличие от остальных конструктов, писать на след. строке:

              какие нахуй конструкторы в K&R?
              В сях как бы нет конструкторов, равно как и ООП.

              Пзц, ты бы хоть изучил, что ли
              Ответить
              • а ты выучи разницу между словами "конструкт" и "конструктор"
                Ответить
    • Power(2, N)...
      Ааа, ну да, это же платформенно-независимый код на случай запуска на троичной машине.
      Ответить
      • :))))))))))))

        А представляете ,если бы размер интеджеров в яве зависел от железа, как в сях?
        А размер чара -- от кодировки системы.

        Вот смешно было бы
        Ответить
      • Даже на такой случай уже и так есть ldexp() ;)
        Ответить
    • и никого не смутила операция "++" в "Сишном" коде ?
      Ответить
      • C++ тут нет.
        Ответить
      • Удот, откуда они по-твоему в С++ ?
        Ответить
      • Я вас удивлю, но операция "инкремент" доступна даже на ассемблере для x86-архитектур ;)... не то, что на Си.
        Ответить
    • это какбэ цэ++ могу объяснить почему.
      int main() {
      типично для с++. в с было бы так:
      void main(void) {

      oct=oct >> 1; - только в с++

      return 0; - опять таки, возвращать из main'а числа придумали только в с++
      Ответить
      • > oct=oct >> 1; - только в с++
        Побитовый сдвиг не изучали, сразу потоки ввода-вывода. Не иначе.
        Ответить
      • такого фееричного фейла я еще не видел
        ты просто сказочный далбаеб
        Ответить
      • Мдяяя... Ваш пост настолько бредоподобен, что я даже не знаю что ответить :)
        Ответить
      • это Вебкилл или сфдев?
        по моему, это самый эпичный вброс на моей памяти...
        Ответить
        • не выебывайся пушка, это ты аффтар... думал никто не заметит... авотхуйтеврот.
          Ответить
        • приведи какой-нибудь свой код! заебал понты кидать!
          Ответить
          • поддерживаю!
            Ответить
          • живи и мучайся...
            Ответить
          • а вообще я под нда, и мне намекнули что кидацца кодом нехорошо и не по контракту...
            Ответить
            • ты что школоло весь код по контракту писал?..
              или кода нет и ты максимум говнотестер?
              Ответить
      • >>опять таки, возвращать из main'а числа придумали только в с++

        да, блядь. "return code" у программ через сраку возвращали.
        Дибил ты этакий
        Ответить

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