【剑指offer】(扩展)大数相加
发布时间:2021-03-05 08:45:58 所属栏目:大数据 来源:网络整理
导读:问题: 实现一个加法,将两个大数相加,不使用BigInteger。 分析: 使用字符串或者数组,实现每位相加进位,要注意两个数对齐及最终进位的情况。 首先将两个字符串倒置,方便补0将位数对齐及逐位相加。并且使用StringBuffer方便字符串修改。 注意:字符实
问题: 实现一个加法,将两个大数相加,不使用BigInteger。 分析: 使用字符串或者数组,实现每位相加进位,要注意两个数对齐及最终进位的情况。 首先将两个字符串倒置,方便补0将位数对齐及逐位相加。并且使用StringBuffer方便字符串修改。 注意:字符实现逐位相加,要将字符转为为数值或求出字符表示的数值大小。 实现: <span style="font-family:Microsoft YaHei;font-size:14px;">public String bigAdd(String s1,String s2) { int len1 = s1.length(); int len2 = s2.length(); if (s1 == null || len1 <= 0) return s2; if (s2 == null || len2 <= 0) return s1; StringBuffer sum = new StringBuffer(); StringBuffer sb1 = new StringBuffer(s1).reverse(); StringBuffer sb2 = new StringBuffer(s2).reverse(); int sublen = Math.abs(len1 - len2); int len = len1; if (len1 < len2) { len = len2; for (int i = 0; i < sublen; i++) { sb1.append('0'); } } else if (len2 < len1) { len = len1; for (int i = 0; i < sublen; i++) { sb2.append('0'); } } int over = 0;// 进位 boolean flow = false;// 最高位进位溢出 for (int i = 0; i <= len - 1; i++) { int bit = (sb1.charAt(i) - '0') + (sb2.charAt(i) - '0') + over; if (bit >= 10) { if (i == len - 1) { flow = true; } over = 1; sum.append(bit - 10); } else { over = 0; sum.append(bit); } } if (flow) { sum.append(over); } return sum.reverse().toString(); }</span> (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |