java - 另一种不使用 "*"运算符将两个数字相乘的方法

标签 java

昨天我进行了一次有趣的面试,面试官问了我一个经典问题:如何在不使用 * 运算符的情况下在 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)));
}**

所以现在我有两个问题要问你:

  1. 我还缺少另一种方法吗?
  2. 我无法想出答案的事实是否证明我的逻辑推理能力不足以提出解决方案,并且我不是“适合”成为一名程序员?因为老实说,这个问题看起来并不难,我敢肯定大多数程序员都会轻松快速地找到答案。

最佳答案

我不知道这是否必须是一个严格的“编程问题”。但在数学方面:

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/

相关文章:

java - Google Cloud Storage - Java API 中是否有等效的 gsutil 'rsync'?

java - 圆与线段相交

java - RXJava逻辑图链

java - 为什么 Pattern.MULTILINE 不匹配 java 正则表达式中的新行

java - 在 Android 中创建动态创建的 View 时如何添加事件处理程序?

java - 准备语句的问题

为类创建文件夹的 Java makefile

java - 应用程序重新启动时保存 View 状态android

java - 无法启动 "Hello World"程序

java - 从数据库代码中删除样板