Недавно один из друзей рассказал мне о проблеме, когда представьте, что вам нужно умножить два числа без использования «*» в Javascript.

Если вы хотите попробовать, можете попробовать прямо сейчас, потому что я расскажу вам о трех известных мне способах. Вероятно, существует множество способов решить эту проблему, и если вы найдете отличный способ решить эту проблему, поделитесь.

Вот несколько крутых и модных способов решить эту проблему.

*** Этот блог отформатирован от худшего к лучшему с точки зрения эффективности ***

*** Под эффективностью я подразумеваю количество шагов для решения проблемы. Чем больше шагов, тем хуже алгоритм для решения проблемы. ***

Метод: 1

function multiply(a, b){
    return ("i").repeat(a).repeat(b).length    
}

Авария:

У нас есть метод, который принимает два входа (a, b). Мы создаем строку «i» и повторяем ее «a» раз, затем повторяем «b» раз, а затем возвращаем длину.

Ex:

multiply(5, 3)           //our a is 5 and b is 3
"i"                      //creating a string of "i"
"iiiii"                  //repeating it a times or 5 
"iiiiiiiiiiiiiii"        //repeating again b times or 3
then we return the length which would be 15.

Интересный способ решить проблему, но мы можем добиться более эффективного результата.

Метод: 2

function multiply(a, b){
  let answer = a
  for(var i = 0; i < b - 1; i++){
    answer += a
  }
  return answer
}

Авария:

Мы создаем переменную с именем «ответ» и присваиваем ей значение «а». Затем мы создаем цикл for, который будет повторяться до тех пор, пока «i» не станет меньше «b -1». Почему «б -1»? Потому что мы уже присвоили «ответ» «а». На каждой итерации мы добавляем «а» к «ответу». По окончании итерации мы возвращаем «ответ».

Ex:

multiply(6, 3)           //our a is 6 and b is 3
//before iteration
answer is 6              //assign answer equal to a which is 6
//iteration begins
answer is now 12         // i is now 1 
answer is now 18         // i is now 2 which is means break loop as
                            i is no longer less than b - 1.
then we return "answer" which would be 18.

Метод: 3

Прежде чем я покажу вам это. Я хотел бы отдать должное тому, кто это написал.

Благодарим за этот метод Андрей Этумян, который ответил на эту проблему, и Stack Overflow и nicael, который редактировал эту проблему.

function multiply(a, b) {
  return a / (1 / b);
}

Ага! Вот и все!

Авария:

Разделите «1» на «b», а затем разделите «a» на результат.

Ex.

multiply(5, 5)           //our a is 5 and b is 5
5 / (1 / 5)              //fill in the blanks
5 / 0.2                  // (1 / 5) simplifies to 0.2
25                       // 5 over 0.2 is 25
then we return 25

Выводы:

Последний метод является наилучшим с точки зрения эффективности, но есть и другие решения, которые можно найти, если мыслить нестандартно.

Спасибо за прочтение!