package add; import java.math.BigInteger; public class BigAdd { public static String bigadd(String n1, String n2) { // 字符串缓存区:提高字符串操作效率 StringBuffer result = new StringBuffer(); // 反转字符串 n1 = reverse(n1); n2 = reverse(n2); // 最大长度 int len1 = n1.length(); int len2 = n2.length(); // 最大长度 int maxLen = max(len1, len2); // 是否需要进位 boolean over = false; // 短字符串的高位用0补齐 cover(n1, n2, len1, len2); for (int i = 0; i < maxLen; i++) { // 每一位相加 int nSum = changeToint(n1, i) + changeToint(n2, i); if (nSum < 9) { // 上一次有进位 if (over = true) { if (nSum == 9) { result.append(0); } else { result.append(nSum + 1); // 取消进位 over = false; } } else { result.append(nSum); } } else { if (over == true) { result.append(nSum - 10 + 1); } else { result.append(nSum - 10); over = true; } } } // 最后是否还有进位 if (over == true) { result.append(1); } return result.reverse().toString(); } public static String reverse(String n) { n = new StringBuffer(n).reverse().toString(); return n; } public static int max(int a, int b) { return a > b ? a : b; } public static int changeToint(String n, int i) { // 加""将字符转为String return Integer.parseInt(n.charAt(i) + ""); } public static void cover(String n1, String n2, int len1, int len2) { if (len1 < len2) { for (int i = len1; i < len2; i++) { n1 += "0"; } } else if (len1 > len2) { for (int i = len2; i < len1; i++) { n2 += "0"; } } } // 测试 public static void main(String[] args) { String n1 = "666666666666666666"; String n2 = "696969696969696969"; String n = bigadd(n1, n2); System.out.println(n); // 用BigInteger类验证 BigInteger b1 = new BigInteger(n1); BigInteger b2 = new BigInteger(n2); System.out.println(b1.add(b2)); } }