1. Java / Говнокод #20490

    +4

    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
    import java.util.Scanner;
    import java.io.*;
    
    public class Multiply {
    
        public static int multiplyNumbers(int n, int m)
        {
            int i = 0, result = 0;
            for(i = 0; i < m; i ++)
                result += n;
            return result;
        }
    
        public static void main(String [] args) {
            Scanner sc = new Scanner(System.in);
            int n,m,ans;
            n = sc.nextInt();
            m = sc.nextInt();
            ans = multiplyNumbers(n,m);
            System.out.println(ans);
        }
    }

    Запостил: joker1484, 08 Августа 2016

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

    • дай угадаю, как тебя зовут лаба?
      Ответить
    • Звездочка на клавиатуре сломалась? Можно было из "import java.io.*" скопировать.
      Ответить
    • Смотрите, как надо:
      https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
      https://github.com/Herzult/SimplePHPEasyPlus
      Ответить
      • Только заметил.

        Первая ссылка: 136 issues, 19 pull requests.
        Вторая ссылка: 24 issuses, 2 pull requests.

        И ведь не лень кому-то было...
        Ответить
      • > FizzBuzzEnterpriseEdition
        Ох лол, оно джаву крашнуло!

        *** buffer overflow detected ***: /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java terminated
        Ответить
        • Может быть, тупо оперативки не хватило?
          Ответить
          • > оперативки не хватило
            Ну тогда это полноценное энтерпрайзное решение.
            Ответить
    • Упорный студент-оптимизатор.

      public static int MultiplyNumbers(int n, int m)
          {
              int i = 0, result = 0;
      
      	var min = Math.Min(n, m);
      	var max = Math.Max(n, m);
      
              for(i = 0; i < min; i++)
                  result += max;
      
              return result;
          }
      Ответить
      • public static int MultiplyNumbers(int n, int m)
        {
            int i, result = 0;
            
            if(n < m) {
                i = n;
                n = m;
                m = i;
            }
        
            while(m-- > 0) {
                result += n;
            }
        
            return result;
        }
        Ответить
        • public static int MultiplyNumbers(int n, int m)
          {
              int result = 0;
              
             for(i = 0; i < Math.Min(n, m); i++)
                      result += Math.Max(n, m);
              return result;
          }
          Ответить
      • > оптимизатор
        Где бинарное возведение в степень умножение?
        Ответить
    • А gcc бы оптимизнул.
      Ответить
    • int multiply(int a, int b) {
         int c = 0;
         while (b > 0) {
             if (b & 1)
                 c += a;
             b >>= 1;
             a += a;
         }
         return c;
      }
      Ответить
      • multiply(2, -2)
        Ответить
        • /*! \fn int multiply(int a, int b) 
              \brief Multiplies two numbers
              \param a First multiplier
              \param b Second multiplier
              \pre a, b are non-negative
          */
          Пофиксил
          Ответить
        • И что? Какое-нибудь UB из-за сдвигов случится?
          Хотя, в Java нормально отработает с ожидаемым результатом.
          Ответить
          • Нет, просто 0 вернёт. Так и надо?
            Ответить
            • Так и надо. Больше меня беспокоит, что асимметричные (без min/max) решения дают 0 = multiply(2, -2) != multiply(-2, 2) = -4. Дурацкая четвёрка вылезает.
              Хотя, тут наверно всё предельно логично. Взять двойку минус два раза нельзя, потому и ноль. А вот минус двойку, если таковая всё же нашлась, можно два раза.
              Ответить
      • Что-то сегодня боянный и хилый у меня multiply вышел.
        https://ideone.com/Y7KCZx
        Ответить
    • Предлагаю пойти дальше и представить сложение циклом инкрементов на единицу.

      А инкремент представить циклом побитовых операций:
      bit_number = 0;
      shifted_value = 1 << bit_number;
      if (x & shifted_value == 0) {
        x |= (shifted_value; // если в последнем разряде ноль, просто пишем единицу
      } else {
        x &= ~shifted_value; // иначе обнуляем последний разряд и выполняем перенос единицы в следующий
        bit_number++;
        // тут будет рекурсивный вызов
      }
      Ответить
      • > (x & shifted_value == 0)

        LOL
        == приоритетнее, чем &
        Ответить
        • Проморгал. Теперь буду обкладываться скобочками, как лиспер.
          Ответить
        • Ты точно с && не путаешь?
          Ответить
          • Нет, не путает. & идёт сразу после == в списке приоритетов. Затем ^, затем |, а потом уже &&
            Ответить
    • Какой багор )))
      Ответить
    • Чот не пойму почему нельзя было просто n * m?
      Ответить
      • Не энтерпрайзно же.
        Ответить
        • и это не энтерпрайзно

          Энтепрайзно это делегировать это во внешний сервис, чтобы инкапсулировать в нем стратегию умножения, таким образом можно будет легко мигрировать на архитектуры, где умножения нет
          Ответить
          • > легко мигрировать на архитектуры, где умножения нет
            И масштабироваться будет замечательно.
            Ответить
            • Чтобы масштабировать нужно использовать сообщения, и сделать метод асинхронным.

              Ты просто посылаешь мультикаст сообщение: "требуется умножить 2 на 3". Умеющая умножать нода его получает, обрабатывает, и шлет тебе ответ
              Ответить
              • > мультикаст сообщение
                Скорее придётся развернуть очередь (какого-нибудь rabbit mq)... Мы же не хотим, чтобы несколько нод одновременно откликнулись на этот запрос?
                Ответить
                • Ну это зависит от использования. Если каждое сообщение будет иметь уникальный ID, то легко можно будет отстрелить кучу ответов на одно сообщение.

                  MQ нам нужен в любом случае, причем нужно учесть транзакционность чтобы сообщения не потерялись. Можно использовать СУБД в качестве бекенда (если там есть two phase commit), а у MS в транзакция может участвовать файловая система.

                  Вообще вырисовывается достаточно универсальная штука. Возможно нам следует разработать новый xml-based DSL для подобных задач, опубликовать его схему, и сделать стандарт для работы оного поверх SOAP
                  Ответить
              • > Ты просто посылаешь мультикаст сообщение: "требуется умножить 2 на 3". Умеющая умножать нода его получает, обрабатывает, и шлет тебе ответ

                Чето так себе архитектура. А если разные ланы? Надо сервисдискавери через консул или хотя бы днс.
                Ответить
                • Всмысле мультикаст-домейны разные?
                  Ну в теории можно настроить передачу мультикаст траффика (см. IGMP, PIM). Но лучше и правда использовать какой-то discovery вроде srv записи в DNS (как в AD)
                  Ответить
              • Только надо про SSL не забыть, чтоб кто попало херню не сообщил.
                Но если длинной арифметики нет, то не беда, просто посылаешь мультикаст сообщение: "требуется проверить подлинность".
                Ответить
                • Тогда и хранилище сертификатов нужно секьюрное.
                  Ответить
                  • И свой CA, само собой.
                    Ответить
                  • Ну и иерархию супервизоров, чтобы всю эту инфраструктуру мониторить...
                    Ответить
                    • Её одной мало, нужна N+M географическая избыточность. Для сети использовать, естественно, openflow и SCTP с multihoming.
                      Ответить
                      • И чуть не забыл, что всё должно быть по возможности в виде микросервисов в докере.
                        Ответить
                        • И vxwxv, чтобы докером рулил из баша.
                          Ответить
                          • и чтобы у него "ls" в баш не завезли, и он бы его сам реализовывал на перле, и рассказывал бы при этом какое баш говно
                            Ответить
                            • ...Используя блокчейн.
                              Ответить
                              • Чисто функциональный иммутабельный блокчейн на лиспе.
                                Ответить
                                • С виртуальной машиной malbolge для интерпретации скриптов транзакций.
                                  Ответить
                                  • Пролог в качестве БД.
                                    Ответить
                                    • > Пролог в качестве БД.
                                      Да ну, слишком адекватно.

                                      В качестве БД надо взять машину Анала Тьюринга. У неё же лента бесконечна, можно весь инет вместить.
                                      Ответить
                                      • Но сколько хуёв может вместить твоё очко, Тьюрингу и не снилось...
                                        Ответить
                                        • Тьюринг сам был пассивным геем (Борманд как бэ намекает), так что, не соглашусь с тобой.
                                          Ответить
                          • wvxvw
                            Как будто так сложно запомнить!
                            Ответить

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