大数相乘最直接的算法就是模拟小学学到的竖式乘法,可使用数组或者字符串来存储乘数和被乘数,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(); ?>