简单的大数相乘算法

    大数相乘最直接的算法就是模拟小学学到的竖式乘法,可以使用数组或者字符串来存储乘数和被乘数,php代码实现如下:

<?php
/**
 * 大数相乘代码
 */

function multiply($str1,$str2){
    $str1len = count($str1);
    $str2len = count($str2);
    
    
    $str3 = array();
    //初始化结果数组
    for($i=0;$i<$str1len+$str2len;$i++){
        $str3[$i]=0;
    }
    
    //计算交叉相乘的结果
    for($i=0;$i<$str1len;$i++){
        for($j=0;$j<$str2len;$j++){
            $str3[$i+$j+1]+=$str1[$i]*$str2[$j];
        }
    }
    
    //如果大于10,则进位
    for($i=$str1len+$str2len-1;$i>=0;$i--){
        if($str3[$i]>=10){
            $str3[$i-1]+=intval($str3[$i]/10);
            $str3[$i]%=10;
        }

    }
    //去掉高位的0
    $i=0;
    while($str3[$i]==0){
        $i++;
    }
    
    
    
    $str4 = array();
    
    //复制到新的数组
    for($j=0;$i<$str1len+$str2len;$i++,$j++){
        $str4[$j]=$str3[$i];
    }
    
    
    //输出
    foreach($str4 as $tmp){
        echo $tmp;
    }
    
    
    
}


function main(){
    $a = array(1,2,3);
    $b = array(1,2,3);
    multiply($a,$b);
}


main();

    	
?>

你可能感兴趣的:(算法,大数相乘)