超大整数使用普通的加法肯定会出现溢出的情况
思路分析
将超大整数逐个拆分位单个字符,按位相加。
function sumStr($str1,$str2)
{
$c1 = strlen($str1)-1;
$c2 = strlen($str2)-1;
$i = $c1 > $c2 ? $c1 : $c2;
$str = '';
$surplus = 0;
for (; $i>=0; $i--,$c1--,$c2--){
$sum = 0;
if($c1 >= 0 && $c2 >= 0){
$sum = $str1[$c1] + $str2[$c2] + $surplus;
}elseif($c1 < 0){
$sum = $str2[$c2] + $surplus;
}elseif($c2 < 0){
$sum = $str1[$c1] + $surplus;
}
if($sum > 9){
$str[$i] = $sum - 10;
$surplus = 1;
}else{
$str[$i] = $sum;
$surplus = 0;
}
if(!$i && $surplus){
$str = $surplus.$str;
}
}
return $str;
}
$s1 = '897685675463468768967';
$s2 = '42423476898765356';
echo sumStr($s1,$s2);
输出结果:897728098940367534323
登录后可发表评论
09月10日 11:01
09月10日 11:01