加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

简单的大数相乘算法

发布时间:2020-12-14 04:04:41 所属栏目:大数据 来源:网络整理
导读:? ? 大数相乘最直接的算法就是模拟小学学到的竖式乘法,可以使用数组或者字符串来存储乘数和被乘数,php代码实现如下: ?php/** * 大数相乘代码 */function multiply($str1,$str2){ $str1len = count($str1); $str2len = count($str2); $str3 = array(); //

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


main();

    	
?>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读