由于位数过多会出现溢出无法正常一位一位显示的问题,算法原理:定义大数为字符串,通过遍历从个位依次相加,判断是否大于10需要进位实现。
代码:
#!/usr/bin/php
<?php
error_reporting(E_ALL);
//两个大数相加,定义为字符串,整型太长会溢出
$a = '987654321098765432109876543210';
$b = '987654321098765432109876543210';
//取两个数长度
$lena = strlen($a);
$lenb = strlen($b);
//定义和
$sum = '';
//定义进位标志
$t = 0;
//循环(条件:从两个数末位开始遍历,直到最长的遍历完)
for( $i=$lena-1,$j=$lenb-1 ; ($i>=0 || $j>=0) ; $i--,$j-- ){
//取相同位
$aa = $i>=0 ? $a[$i] : 0;
$bb = $j>=0 ? $b[$j] : 0;
//相同位相加+进位
$res = $aa+$bb+$t;
//转为字符串
$res = (string)$res;
//比较是否大于10
if($res < 10){
//直接拼接即可
$sum = $res.$sum;
//进位标志为0
$t = 0;
}else{
//取末位
$sum = $res[1].$sum;
//进位标志为1
$t = 1;
}
}
//遍历完毕,判断进位是否存在,需加1
if($t == 1){
$sum = (string)$t.$sum;
}
echo $sum.PHP_EOL;