You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需使用*运算符实现两数相乘的其他方法及能力困惑咨询

关于Java无*运算符实现两数相乘的问题解答

先聊聊你遇到的面试窘境

兄弟,我太懂这种面试时脑子突然“宕机”的感觉了——明明是经典问题,可一被面试官盯着,瞬间就思路卡壳,完全想不出解法。先别轻易否定自己,咱们一步步来拆解你的问题。


一、补充你遗漏的实现方法

你已经找到了三种不错的基础解法,不过还有几个实用的思路可以补充,尤其是能处理负数、效率更高的方案:

1. 优化版循环/递归(支持负数)

你原来的循环和递归只处理了正数的情况,实际面试中面试官大概率会追问“如果输入负数怎么办?”,可以先取绝对值计算,最后根据符号调整结果:

// 优化版循环(支持正负整数)
public static int multiplyWithLoop(int a, int b) {
    int absA = Math.abs(a);
    int absB = Math.abs(b);
    int result = 0;
    // 选较小的数作为循环次数,提升效率
    for (int i = 0; i < Math.min(absA, absB); i++) {
        result += Math.max(absA, absB);
    }
    // 根据原数符号判断结果正负
    return (a < 0 && b < 0) || (a > 0 && b > 0) ? result : -result;
}

2. 位运算实现(高效解法)

利用位运算的左移等价于乘2的特性,把乘法拆解成移位和加法的组合,这是效率最高的解法之一,也是面试中的加分项:

// 位运算实现乘法(支持正负)
public static int multiplyWithBitwise(int a, int b) {
    int result = 0;
    // 处理负数,先转成正数计算
    int absA = Math.abs(a);
    int absB = Math.abs(b);
    
    while (absB != 0) {
        // 如果当前位是1,加上对应的a的移位值
        if ((absB & 1) != 0) {
            result += absA;
        }
        // a左移一位(等价于乘2)
        absA <<= 1;
        // b右移一位(等价于除以2,取整)
        absB >>= 1;
    }
    // 还原符号
    return (a < 0 ^ b < 0) ? -result : result;
}

3. 连续翻倍法(易理解的高效变种)

本质和位运算思路类似,但用循环翻倍的方式实现,更直观易懂:

// 连续翻倍法
public static int multiplyWithDouble(int a, int b) {
    int absA = Math.abs(a);
    int absB = Math.abs(b);
    int result = 0;
    int current = absA;
    
    while (absB > 0) {
        if (absB % 2 == 1) {
            result += current;
        }
        current += current; // 翻倍,等价于current *=2
        absB = absB / 2;
    }
    return (a < 0 ^ b < 0) ? -result : result;
}

二、关于“逻辑推理能力不足”的疑问

兄弟,真的别因为这一次卡壳就否定自己!面试时的压力、环境陌生感,甚至前一晚没睡好,都可能让你瞬间“短路”——我见过不少资深程序员在面试时遇到基础题卡壳,转头就能写出复杂的业务逻辑。

这个问题看似简单,但它考察的其实是对乘法本质的理解(乘法是重复加法)以及对Java基础特性的灵活运用(位运算、数学函数),不是说想不到就代表你不适合编程。反而你面试后主动去查资料、找解法,这恰恰是程序员最宝贵的能力——遇到问题主动学习和解决的态度。

编程能力是长期积累的,一次面试的失误根本说明不了什么,放平心态,继续加油就好!


内容的提问来源于stack exchange,提问作者Jesse James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:57:52