BASIC-29 高精度加法

BASIC-29 高精度加法

题目

资源限制

时间限制:1.0s 内存限制:512.0MB

问题描述

输入两个整数 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 的值。

样例输入

20100122201001221234567890
2010012220100122

样例输出

20100122203011233454668012

题解

import java.util.Scanner;

public class BASIC_29 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String A = sc.nextLine();
        String B = sc.nextLine();
        sc.close();
        int n = Math.max(A.length(), B.length());
        int[] c = add(toArray(A, n), toArray(B, n));
        System.out.println(toString(c));
    }

    public static int[] toArray(String num, int n) {
        int[] arr = new int[n];
        int diff = n - num.length();
        for (int i = arr.length - 1; i >= 0; i--)
            if (i >= diff)
                arr[i] = num.charAt(i - diff) - '0';
            else
                // 补0
                arr[i] = 0;
        return arr;
    }

    public static String toString(int[] arr) {
        int k = 0;
        if (arr[0] == 0)
            k = 1;
        StringBuffer str = new StringBuffer();
        for (int i = k; i < arr.length; i++) {
            str.append(arr[i]);
        }
        return str.toString();
    }

    public static int[] add(int[] a, int[] b) {
        int[] c = new int[a.length + 1];
        int l = 0;
        for (int i = c.length - 1; i > 0; i--) {
            int k = a[i - 1] + b[i - 1] + l;
            c[i] = k % 10;
            l = k / 10;
        }
        c[0] = l;
        return c;
    }
}
posted @ 2022-03-19 15:02  morning-start  阅读(29)  评论(0编辑  收藏  举报