昨天我进行了一次有趣的面试,面试官问了我一个经典问题:如何在不使用 *
运算符的情况下在 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)));
}**
所以现在我有两个问题要问你:
- 我还缺少另一种方法吗?
- 我无法想出答案的事实是否证明我的逻辑推理能力不足以提出解决方案,并且我不是“适合”成为一名程序员?因为老实说,这个问题看起来并不难,我敢肯定大多数程序员都会轻松快速地找到答案。
最佳答案
我不知道这是否必须是一个严格的“编程问题”。但在数学方面:
x * y = x / (1 / y) #divide by inverse
所以:
方法一:
public static double multiplier(double a, double b) {
// return a / (1 / b);
// the above may be too rough
// Java doesn't know that "(a / (b / 0)) == 0"
// a special case for zero should probably be added:
return 0 == b ? 0 : a / (1 / b);
}
方法2(更“编程/API”的解决方案):
使用大小数、大整数:
new BigDecimal("3").multiply(new BigDecimal("9"))
可能还有更多方法。
关于java - 另一种不使用 "*"运算符将两个数字相乘的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50639366/