题目描述
给定两个正整数,计算它们的和
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围:
1 ≤ n . l e n g t h ≤ 100000 1 \le n.length \le 100000 1≤n.length≤100000
输入样例:
12
23
输出样例:
35
Solution
package cn.zxy.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
/**
* 高精度加法
* 12
* 23
*
* 35
*/
public class highPrecisionAddition {
public static void main(String[] args) throws IOException {
//方法一:用BitInteger处理
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BigInteger a = new BigInteger(in.readLine());
BigInteger b = new BigInteger(in.readLine());
System.out.println(a.add(b));
//方法二:用字符串处理,速度比方法一快一倍
String c = in.readLine(), d = in.readLine();
List<Integer> x = new ArrayList<>();
List<Integer> y = new ArrayList<>();
for (int i = c.length() - 1; i >= 0; i--) x.add(c.charAt(i) - '0');
for (int i = d.length() - 1; i >= 0; i--) y.add(d.charAt(i) - '0');
//用栈来存储,先存储的是个位,打印先打印高位
Deque<Integer> e = new ArrayDeque<>();
e = add(x, y);
while(!e.isEmpty()){
System.out.print(e.pop());
}
}
//设定x > y
private static Deque<Integer> add(List<Integer> x, List<Integer> y) {
if (x.size() < y.size()) return add(y, x);
Deque<Integer> c = new ArrayDeque<>();
//进位
int t = 0;
for (int i = 0; i < x.size(); i++) {
t += x.get(i);
if (i < y.size()) t += y.get(i);
c.push(t % 10);
t = t / 10;
}
//最后的进位
if (t > 0) c.push(t);
return c;
}
}