如果使用现成的工具类来计算,可以用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());//逆序后输出结果 } } }