php大数相乘,简单的大数相乘算法

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

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值