/*******二进制大整数乘法**********/
function multipication_b ($A,$B){
$sResult = "";
//反转字符串
$A=strrev($A);
$B =strrev($B);
//建立temp变量
$flag = array();
for($i=0;$i<(strlen($A)+strlen($B)+1);$i++){
$flag[$i]= "0";
}
//依次相乘叠加
for ($i =0;$i<strlen($A);$i++){
for($j =0;$j<strlen($B);$j++){
$temp= ($A[$i]&$B[$j]);
$flag[$i+$j+1] =$flag[$i+$j+1]+(int)(($flag[$i+$j]+$temp)/2);
$flag[$i+$j] =($flag[$i+$j]+$temp)%2;
}
}
// //再次叠加
// for($i=count($flag)-1;$i>=0;$i--){
// $flag[$i+1] =(int)( $flag[$i]/2);
// $flag[$i] = $flag[$i]%2;
// }
//去除高位无用的0;
$mark = 0;
for($i=count($flag)-1;$i>=0;$i--){
//echo $flag[$i];
if($flag[$i]!=0&&$mark==0){
$mark = $i;
}
if($mark!=0){
$sResult =$sResult.$flag[$i];
}
}
return $sResult;
}
二进制的大整数乘法
最新推荐文章于 2022-11-10 08:52:55 发布