如果使用现成的工具类来计算,可以用BigInteger类来实现,3行代码:
BigInteger a = new BigInteger(sc.nextLine());
BigInteger b = new BigInteger(sc.nextLine());
System.out.println(a.add(b));
不过出题的本意是自己写代码实现:
逆序后相加,要考虑到每位相加结果的进位和最后一位的进位
package com.hw.newcoder;
/**
 输入两个用字符串 str 表示的整数,求它们所表示的数之和。
 9876543210 + 1234567890 = 11111111100
 */

import java.math.BigInteger;
import java.util.Scanner;

public class BigIntPlus {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()) {
//            BigInteger a = new BigInteger(sc.nextLine());
//            BigInteger b = new BigInteger(sc.nextLine());
//            System.out.println(a.add(b));
            String aStr = sc.nextLine();
            String bStr = sc.nextLine();
            if (aStr.length() < bStr.length()) {
                String tmp = aStr;
                aStr = bStr;
                bStr = tmp;
            }

            char[] aCharReverse = new StringBuffer(aStr).reverse().toString().toCharArray();
            char[] bCharReverse = new StringBuffer(bStr).reverse().toString().toCharArray();
            StringBuffer sb = new StringBuffer();
            int carry = 0; //进位
            if (aStr.length() == bStr.length()) {//长度相等的情况,容易计算
                for (int i = 0; i < aStr.length(); i++) { //按位逆序相加,考虑进位carry
                    int echSum = (Integer.parseInt(aCharReverse[i] + "") + Integer.parseInt(bCharReverse[i] + "") + carry) % 10;
                    carry = (Integer.parseInt(aCharReverse[i] + "") + Integer.parseInt(bCharReverse[i] + "") + carry) / 10;
                    sb.append(echSum);
                    if ((i == aStr.length() - 1) && carry == 1) {//最后一位的进位处理
                        sb.append("1");
                    }
                }
            } else {
                for (int i = 0; i < bStr.length(); i++) { //逆序相加,先计算相同位数的和以及进位
                    int echSum = (Integer.parseInt(aCharReverse[i] + "") + Integer.parseInt(bCharReverse[i] + "") + carry) % 10;
                    carry = (Integer.parseInt(aCharReverse[i] + "") + Integer.parseInt(bCharReverse[i] + "") + carry) / 10;
                    sb.append(echSum);
                }
                for (int j = bStr.length(); j < aStr.length(); j++) {//再计算较长数组多出来的部分和进位
                    int echSum = (Integer.parseInt(aCharReverse[j] + "") + carry) % 10;
                    carry = (Integer.parseInt(aCharReverse[j] + "") + carry) / 10;
                    sb.append(echSum);
                    if ((j == aStr.length() - 1) && carry == 1) {//最后一位的进位处理
                        sb.append("1");
                    }
                }
            }

            System.out.println(sb.reverse().toString());//逆序后输出结果
        }
    }
}