1. 程式人生 > >[Java] 藍橋杯BASIC-29 基礎練習 高精度加法

[Java] 藍橋杯BASIC-29 基礎練習 高精度加法

問題描述輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。演算法描述由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。定義一個數組A,A[0]用於儲存a的個位,A[1]用於儲存a的十位,依此類推。同樣可以用一個數組B來儲存b。計算c = a + b的時候,首先將A[0]與B[0]相加,如果有進位產生,則把進位(即和的十位數)存入r,把和的個位數存入C[0],即C[0]等於(A[0]+B[0])%10。然後計算A[1]與B[1]相加,這時還應將低位進上來的值r也加起來,即C[1]應該是A[1]、B[1]和r三個數的和.如果又有進位產生,則仍可將新的進位存入到r中,和的個位存到C[1]中。依此類推,即可求出C的所有位。

最後將C輸出即可。輸入格式輸入包括兩行,第一行為一個非負整數a,第二行為一個非負整數b。兩個整數都不超過100位,兩數的最高位都不是0。輸出格式輸出一行,表示a + b的值。樣例輸入201001222010012212345678902010012220100122樣例輸出20100122203011233454668012

package base29;

import java.util.Scanner;

public class Main {
    static final int MAX = 101;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] a = in.nextLine().toCharArray();
        char[] b = in.nextLine().toCharArray();
        in.close();
        int count = a.length > b.length ? b.length : a.length;
        int[] x = new int[MAX];
        int[] y = new int[MAX];
        int[] z = new int[MAX];
        for (int i = a.length - 1, j = 0; i >= 0; i--, j++) {
            x[j] = (a[i] - '0') > 0 ? a[i] - '0' : 0;
        }
        for (int i = b.length - 1, j = 0; i >= 0; i--, j++) {
            y[j] = (b[i] - '0') > 0 ? b[i] - '0' : 0;//不知道為什麼會出現負數。。。。。
        }

        int r = 0;
        for (int i = 0; i < MAX; i++) {
            z[i] = x[i] + y[i] + r;
            r = z[i] / 10;
            z[i] %= 10;
        }

        r = MAX - 1;
        while (z[r] == 0) --r;
        while (r >= 0) {
            System.out.print(z[r]);
            r--;
        }


    }
}