Вчера у меня было интересное интервью, где интервьюер задал мне классический вопрос: как мы можем умножить два числа на Java без использования оператора *
. Честно говоря, я не знаю, вызвал ли это стресс, который приходит с интервью, но я не смог придумать какое-либо решение.
После собеседования я вернулся домой и провел через SO ответы. До сих пор вот те, которые я нашел:
Первый метод: использование цикла For
// Using For loop
public static int multiplierLoop(int a, int b) {
int resultat = 0;
for (int i = 0; i < a; i++) {
resultat += b;
}
return resultat;
}
Второй метод: использование рекурсии
// using Recursion
public static int multiplier(int a, int b) {
if ((a == 0) || (b == 0))
return 0;
else
return (a + multiplier(a, b - 1));
}
Третий метод: использование Log10
**// Using Math.Log10
public static double multiplierLog(int a, int b) {
return Math.pow(10, (Math.log10(a) + Math.log10(b)));
}**
Итак, теперь у меня есть два вопроса:
- Есть ли еще один метод, который мне не хватает?
- Неужели тот факт, что я не смог ответить на этот вопрос, доказывает, что мои логические рассуждения недостаточно сильны, чтобы придумывать решения и что я не "вырезана", чтобы быть программистом? Потому что позвольте быть честным, вопрос не казался таким сложным, и я уверен, что большинство программистов легко и быстро найдут ответ.