网上的大整数相加算法(PHP)大多实现的都有这样或者那样的问题,要么没有考虑最高位进位,要么没有考虑各位相加的10进制溢出,大概PHPer都比较粗旷吧。
下面是自己仿照原来C语言版本(谭浩强版算法)改造的php版本,仅供参考:
/*
大整数加法的php实现
*/
function bigDataAdd($a,$b){
$m = strlen($a);
$n = strlen($b);
$num = $m>$n?$m:$n;//取最长数进行循环相加和进位
$result = '';//结果
$flag = 0; //进位标志
while($num--){
$t1 = 0;//用来存储当前位加数
$t2 = 0;//用来存储当前位被加数
if($m>0){
$t1 = $a[--$m];
}
if($n>0){
$t2 = $b[--$n];
}
$t = $t1+$t2+$flag;//当前位加法运算考虑上一轮的进位标志
$flag = intval($t/10);//本轮是否进位
$result = ($t%10).$result;//向高位添加结果
}
//最高位加完发现还有进位标志,需要再向最高位+1
if ($flag) {
$result = $flag.$result;
}
return $result;
}
$a = '999999999999999999999999999999999999';
$b = '1';
$result = bigDataAdd($a,$b);
echo $result;