大数相乘最直接的算法就是模拟小学学到的竖式乘法,可以使用数组或者字符串来存储乘数和被乘数,php代码实现如下:
/**
* 大数相乘代码
*/
function multiply($str1,$str2){
$str1len = count($str1);
$str2len = count($str2);
$str3 = array();
//初始化结果数组
for($i=0;$i
$str3[$i]=0;
}
//计算交叉相乘的结果
for($i=0;$i
for($j=0;$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
$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();
?>