二进制的大整数乘法

来源:互联网 发布:linux 启动tomcat命令 编辑:程序博客网 时间:2024/05/17 10:40

/*******二进制大整数乘法**********/
    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;
    }

原创粉丝点击