JAVAブルーブリッジカップ:高精度アルゴリズム


問題の説明
問題は、2つの整数aおよびbを入力し、この2つの整数の和を出力することを示す.aもbも100位を超えない.アルゴリズム記述は、aおよびbが比較的大きいため、言語内の標準データ型を直接使用して格納することはできない.この問題については,一般に配列を用いて処理される.配列Aを定義し、A[0]はaのビットを格納し、A[1]はaの10ビットを格納する.同様に、bを1つの配列Bで格納することができる.c=a+bを計算するときは、まずA[0]とB[0]を加算し、キャリーが発生した場合は、キャリー(すなわち和の10桁)をrに格納し、和の桁数をC[0]に格納する.すなわち、C[0]は(A[0]+B[0])%10に等しい.その後、A[1]とB[1]を加算すると、下位ビットから上がった値rも加算される.すなわち、C[1]はA[1]、B[1]、rの3つの数の和であるべきである.また、キャリーが発生した場合でも、新しいキャリーをrに格納し、和のビットをC[1]に格納することができる.このようにすれば,Cのすべてのビットを求めることができる.最後にCを出力すればよい.入力フォーマット入力は、2行を含み、第1の動作は非負の整数a、第2の動作は非負の整数bである.2つの整数はいずれも100ビットを超えず、2つの数の最高位は0ではありません.出力フォーマットは、a+bの値を表す行を出力します.サンプル入力201012220101221234567890 20101222010122サンプル出力20101222030011233454668012
コードは次のとおりです.
import java.io.*;

public class Main {

    public static void main(String[] args)throws IOException {

        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
        String num1 = bufferedReader.readLine();
        String num2 = bufferedReader.readLine();

        int[] num1_int=new int[100000];
        int[] num2_int=new int[100000];


        int length=Math.min(num1.length(), num2.length());
        int length_max=Math.max(num1.length(), num2.length());

        int[] num_total=new int[length_max];

        for(int i=0;i1-i]=Character.getNumericValue(num1.charAt(i));
        }
        for(int i=0;i1-i]=Character.getNumericValue(num2.charAt(i));
        }

        for(int i=0;ifor(int i=0;i1;i++){
            if(num_total[i]>9){
                num_total[i]=num_total[i]%10;
                num_total[i+1]=num_total[i+1]+1;
            }
        }

        for(int i=num_total.length-1;i>=0;i--){
            System.out.print(num_total[i]);
        }

    }
}