问题:
实现一个加法,将两个大数相加,不使用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>