PHP坑之:大整数相加

网上的大整数相加算法(PHP)大多实现的都有这样或者那样的问题,要么没有考虑最高位进位,要么没有考虑各位相加的10进制溢出,大概PHPer都比较粗旷吧。

下面是自己仿照原来C语言版本(谭浩强版算法)改造的php版本,仅供参考:

$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;


你可能感兴趣的:(PHP的坑)