PHP实现大数相加、大数相乘

一、最基本的模拟竖式的计算方法:

/* multiply

* a,b should be numeric

* @param $a string

* @param $b string

* @return string

*/

functionmul($a,$b)

{

    $lenA=strlen($a);

    $lenB=strlen($b);

    $result= '0';

    for($inxA=$lenA- 1;$inxA>= 0; --$inxA) {

        $re= '';

        for($i=$inxA+ 1;$i<$lenA; ++$i) {

            $re= "0" .$re;

        }

        $j= 0;

        for($inxB=$lenB- 1;$inxB>= 0; --$inxB) {

            $mul= (int)$a[$inxA] * (int)$b[$inxB] +$j;

            if($mul>= 10) {

                $j=floor($mul/ 10);

                $mul=$mul-$j* 10;

            } else {

                $j= 0;

            }

            $re= (string)$mul.$re;

        }

        if($j> 0)$re= (string)$j.$re;

        $result= add($result,$re);

    }

    return$result;

}

/**

* add

* a,b should be numeric

* @param $a string

* @param $b string

* @return string

*/

functionadd($a,$b)

{

    $lenA=strlen($a);

    $lenB=strlen($b);

    $j= 0;

    $re= '';

    for($inxA=$lenA- 1,$inxB=$lenB- 1; ($inxA>= 0 ||$inxB>= 0); --$inxA, --$inxB) {

        $itemA= ($inxA>= 0) ? (int)$a[$inxA] : 0;

        $itemB= ($inxB>= 0) ? (int)$b[$inxB] : 0;

        $sum=$itemA+$itemB+$j;

        if($sum> 9) {

            $j= 1;

            $sum=$sum- 10;

        } else {

            $j= 0;

        }

        $re= (string)$sum.$re;

    }

    if($j> 0)$re= (string)$j.$re;

    return$re;

}

?>

二、通过调用BCMath实现

PHP 为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任意大小和精度的数字,以字符串形式描述:

$op_left='123456789123456789';

$op_right='123456789123456789';

$rs=bcmul($op_left,$op_right);

var_dump($rs);//string(35) "15241578780673678515622620750190521"

die();

?>

你可能感兴趣的:(PHP实现大数相加、大数相乘)