大数相加

##大数相加

###思路

1. 大数可能超出任何一种整数类型,会引发溢出问题,所以用字符串的格式存储字符串a,b;

2. 获取字符串a的长度为aLen,字符串b的长度为bLen;

3. 比较aLen和bLen的大小,用maxLen保存更大值;

4. 对a,b从个位开始,同位相加,res保存相加结果;

5. 对res取余就是相加后当前位的值,res/10就是进位flag;

6. 用result保存两数相加的结果

7. 各对应的位数相加完之后,判断进位flag是否等于1,如果等于1则最高位+1


###PHP实现

 <?php

function bigNumberAdd($a = null, $b = null)
{
    if (!is_numeric($a) || !is_numeric($b)) {
        return false;
    }
    $aLen = strlen($a);
    $bLen = strlen($b);

    $num = $aLen > $bLen ? $aLen : $bLen;//取最长数进行循环相加和进位

    $result = '';//结果
    $flag = 0;//是否进位
    while ($num--) {
        $adden1 = 0;//加数
        $adden2 = 0;//被加数
        if ($aLen > 0) {
            $adden1 = $a[--$aLen];
        }
        if ($bLen > 0) {
            $adden2 = $b[--$bLen];
        }
        $res = $adden1 + $adden2 + $flag;//当前位加法运算考虑上一轮的进位标志
        $flag = intval($res / 10);//考虑本轮是否进位
        $result = ($res % 10) . $result;
    }
    //最高位加完发现还有进位标志,需要再向最高位+1
    if ($flag) {
        $result = $flag . $result;
    }

    return $result;
}

// 大数相加
$a = '123456789';
$b = '98885';

echo bigNumberAdd($a, $b);



文章已完
作者心情:昨夜西风凋碧树,独上高楼,望尽天涯路。
如无特殊说明,文章均为本站原创,转载请注明出处
  • 转载请注明来源:大数相加
  • 本文永久链接地址:http://icehill.cn/post/single/info/217.html