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;
}
}