Baekjoonアルゴリズム | 10757番問題: 大きな数 A+B

出典

https://www.acmicpc.net/problem/10757

問題

Baekjoon Online Judgeの10757番問題、大きな数 A+Bを解きます。

入力

正確な入力形式と制約は元の問題文に従います。

出力

問題で求められる答えを出力します。

サンプル入力 1

9223372036854775807 9223372036854775808

サンプル出力 1

18446744073709551615

アルゴリズム分類

  • 数学
  • 実装
  • 四則演算
  • 任意精度 / 大きな数の演算

解説

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");

            BigInteger a = new BigInteger(st.nextToken());
            BigInteger b = new BigInteger(st.nextToken());

            System.out.println(a.add(b));
        }
    }
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        String str_A = st.nextToken();
        String str_B = st.nextToken();

        int max_length = Math.max(str_A.length(), str_B.length());

        int[] A = new int[max_length + 1];
        int[] B = new int[max_length + 1];

        for (int i = str_A.length() - 1, idx = 0; i >= 0; i--, idx++) {
            A[idx] = str_A.charAt(i) - '0';
        }

        for (int i = str_B.length() - 1, idx = 0; i >= 0; i--, idx++) {
            B[idx] = str_B.charAt(i) - '0';
        }

        for (int i = 0; i < max_length; i++) {
            int value = A[i] + B[i];
            A[i] = value % 10;
            A[i + 1] += (value / 10);
        }

        StringBuilder sb = new StringBuilder();

        if (A[max_length] != 0) {
            sb.append(A[max_length]);
        }

        for (int i = max_length - 1; i >= 0; i--) {
            sb.append(A[i]);
        }

        System.out.println(sb);
    }
}