关于大数的加减乘除问题也是经常遇到的问题,写了一个相加的算法,仅供参考:
package sort;
public class BigDataAdd {
public static void main(String[] args) {
String a = "1999";
String b = "999";
String result = bigDataAdd(a, b);
System.out.println(result);
}
private static String bigDataAdd(String a, String b) {
// 数据倒置
StringBuffer s1 = new StringBuffer(a).reverse();
StringBuffer s2 = new StringBuffer(b).reverse();
int bigLength = a.length() > b.length() ? a.length() : b.length();
StringBuffer sb = new StringBuffer(bigLength + 1);
if (a.length() > b.length()) {
int count = a.length() - b.length();
while (count-- > 0) {
s2.append("0");
}
} else {
int count = b.length() - a.length();
while (count-- > 0) {
s1.append("0");
}
}
// 两个数字的位数相同后,每位进行相加运算,大于10的话进1
int sum = 0, carry = 0;
int[] result = new int[bigLength + 1];
StringBuffer dd = new StringBuffer(bigLength + 1);
for (int i = 0; i < bigLength; i++) {
sum = s1.charAt(i) - '0' + s2.charAt(i) - '0' + carry;
dd.append(sum % 10);
carry = sum / 10;
}
if (carry == 1) {
dd.append(1);
}
return dd.reverse().toString();
}
}