算法如下。如果A和B是乘以,我们反复地将A乘以2,将B除以2,直到B不能被进一步分割,也就是直到它的值变为0(记住,这是整数除法)。在每个步骤中只要B是奇数,我们将相应的A值添加到我们正在生成的产品中。在结束时,具有相应奇数B值的A值之和为产品明白了吗?
这里有一个例子:
如果要相乘的两个整数是34和19,则运算为:
A B Comment
34 19 add A to the product, B is odd
68 9 add A to the product, B is odd
136 4 ignore this A value, B is even
272 2 ignore this A value, B is even
544 1 add A to the product, B is odd
将所有具有奇数B值的A值相加,得到:
34+68+544=646=>最终产品
正如您的算法所说。
$a = 34;
$b = 19;
$total = 0;
do{
$mod = $b % 2;
if($mod){
$total = $total + $a;
}
echo $mod." - ".$a." - ".$total . "<br/>"; //Steps
$a = $a * 2;
$b = floor($b/2);
}while($b > 0);
echo $total; // 646
步骤:
Mod $a $total
---------------------------
1 - 34 - 34
1 - 68 - 102
0 - 136 - 102
0 - 272 - 102
1 - 544 - 646