说明:防止超过长度限制,用字符串表示整形进行计算(不用数学库)。可以按照小学的时候方法进行计算。比如:314 + 45,乘法同样:
3 1 4
+ 4 5
3 5 9
<?php function fadd($p1, $p2) {return $p1 + $p2;} function fmul($p1, $p2) {return $p1 * $p2;} function cel($p1, $p2, $oper = 'fadd') { $p1 = str_split($p1); $p2 = str_split($p2); //初始化 end($p1); end($p2); do { $digit = $oper(current($p1), current($p2)); //这个函数做乘法的时候也可以用到 $res = (substr($digit, -1, 1) + $over) . $res; //个位 + 之前的进位 $over = substr($digit, 0, strlen($digit) - 1); //现在的进位 prev($p1); prev($p2); } while((current($p1) !== false || current($p2) !== false) || $over); return $res; } function mul($p1, $p2) { $p1 = str_split($p1); end($p1); //初始化,把p1作为被乘数(下面的那个) $len = strlen($p2); do { $res[] = cel($p2, str_repeat(current($p1), $len), 'fmul'); //根据cel的逻辑 132*5 相当于cel(132, 555, 'fmul') } while(prev($p1) !== false); foreach ($res as $k => $v) { //这里把res里的值都加一起,但要注意需要乘上10的$k次方(就是在字符串后面添加k个0) $count = cel($count, $v . str_repeat('0', $k)); } return $count; } $p1 = '5462'; $p2 = '56'; echo cel($p1, $p2); //相加:5518 echo mul($p1, $p2); //相乘:305872