算法-不使用乘法运算符而实现乘法的结果

算法-不使用乘法运算符而实现乘法的结果

泛泛之交 发布于 2017-05-12 字数 247 浏览 1065 回复 3

我们都知道
echo 2 << 1;
相等于
echo 2 * 2;

如果在不允许采用乘法运算符的情况下,你有办法提供任意数值的乘法计算结果么?
function multiply(a,b,...){
return ...;
}

不考虑性能问题,语言不限。

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泛泛之交 2017-09-24 3 楼

乘法:计算a×b

int Multiply(int a, int b)
{
int signStatA = a & SignBitFlagOfInt();
if (signStatA != 0)
{
a = OppositeNumber(a);
}

int signStatB = b & SignBitFlagOfInt();
if (signStatB != 0)
{
b = OppositeNumber(b);
}

int overFlowFlag = SignBitFlagOfInt(); // used for checking if the signed int data overflowed.
int product = 0; // the result of |a| * |b|
for (int curBitPos = 1; curBitPos != 0; curBitPos <<= 1)
{
if ((b & curBitPos) != 0)
{
product = Add(product, a);
if (((a & overFlowFlag) != 0)
|| ((product & overFlowFlag) != 0))
{
throw std::exception("The result data war overflowed.");
}
}
a <<= 1;
}

return ((signStatA ^ signStatB) == 0) ? product : OppositeNumber(product);
}

http://www.cppblog.com/qingbizhu/archive/2012/03/30/168148.html

甜柠檬 2017-07-21 2 楼

用循环叠加或者用递归叠加,用字符串存储,简单的循环迭代出来。去Google一下吧。

清晨说ぺ晚安 2017-07-15 1 楼

自问自答
重在参与

<?php

//投机取巧版
function multiply($a,$b){
return array_product(array($a,$b));
}

//数脚指头版
function multiply2($a,$b){
$n=0;
for($i=0;$i<$a;$i++){
for($m=0;$m<$b;$m++){
$n++;
}
}
return $n;
}

//画鸡蛋版
function multiply3($a,$b){
$eggs = '';
for($i=0;$i<$a;$i++){
$eggs.=str_repeat("o", $b);
}
return strlen($eggs);
}