##大数相加
###思路
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