大数相加

发布时间 2023-10-12 20:55:37作者: aminor

介绍:输入两个数字,输出它们相加之后的结果。
约定:输入数据共两行。第一行为一个整数a,第二行为一个整数b。输出数据共一行一个数。为a和b相加之后的结果。
请尝试使用小学学过的竖式加法进行计算。将输入数据按照字符串输入后拆成一个一个的数字,然后逐位相加并求进位。
输入样例
127450750347603915789832750917694387195834106
231099480231850489102357234823178312
输出样例
127450750578703396021683240020051622019012418


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 读入两个大整数
        String a = scanner.nextLine();
        String b = scanner.nextLine();
        scanner.close();
        // 逆序处理,便于从低位开始相加
        a = new StringBuilder(a).reverse().toString();
        b = new StringBuilder(b).reverse().toString();
        // 确保a的长度不小于b的长度
        if (a.length() < b.length()) {
            String temp = a;
            a = b;
            b = temp;
        }
        String result = "";
        int carry = 0; // 进位标记
        // 逐位相加
        for (int i = 0; i < a.length(); i++) {
            int sum = carry;
            sum += i < a.length() ? a.charAt(i) - '0' : 0;
            sum += i < b.length() ? b.charAt(i) - '0' : 0;
            result += (char)((sum % 10) + '0'); // 取余数作为当前位的结果
            carry = sum / 10; // 取整作为进位
        }
        // 如果最后还有进位,需要将其加入结果中
        if (carry != 0) {
            result += (char)(carry + '0');
        }
        // 逆序输出结果
        System.out.println(new StringBuilder(result).reverse().toString());
    }
}