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

PHP中不使用*和/实现乘法:埃塞俄比亚乘法右移问题求助

埃塞俄比亚乘法代码修复方案

核心问题分析

你的代码存在三个关键问题导致$num2无法正常右移、逻辑失效:

  • 移位操作未赋值回原变量:PHP中<<和>>运算不会直接修改原始变量,必须将运算结果重新赋值给变量,否则$num1、$num2的数值永远不会变化,循环无法推进。
  • 条件判断误用赋值运算符:if ($num4 = $num1)是赋值操作而非比较判断,且这段逻辑完全不符合埃塞俄比亚乘法的规则。
  • 循环逻辑不完整:埃塞俄比亚乘法需要处理到$num2变为0为止,且当$num2为奇数时需累加当前$num1,你当前的循环终止条件和判断逻辑都缺失了关键步骤。

修复后的代码

function ethMul($num1, $num2){
    $count = 0;
    while($num2 > 0){
        // 判断num2是否为奇数,是则累加当前num1到结果
        if ($num2 & 1) { // 位运算判断奇偶,替代%2,符合无乘除要求
            $count += $num1;
        }
        // 移位结果必须赋值回原变量,才会更新数值
        $num1 = $num1 << 1;
        $num2 = $num2 >> 1;
        $num2 = (int) $num2; // 确保整数类型,避免小数干扰
    }
    return $count;
}

echo ethMul(17, 12); // 输出204,对应17*12的正确结果

修复说明

  1. 修正移位赋值:将$num1 << 1改为$num1 = $num1 << 1,$num2同理,确保变量真正被更新。
  2. 简化奇偶判断:用$num2 & 1位运算判断奇偶(结果为1表示奇数),完全符合无乘除的要求,逻辑更高效。
  3. 完善循环逻辑:循环条件改为$num2 > 0,确保所有位数都被处理,每次循环直接判断当前$num2的奇偶性,累加对应$num1,完全贴合埃塞俄比亚乘法的核心规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:05:14