簡單的大數相乘算法

    大數相乘最直接的算法就是模擬小學學到的豎式乘法,可使用數組或者字符串來存儲乘數和被乘數,php代碼實現以下: 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();

    	
?>
相關文章
相關標籤/搜索