AcWing 792. 高精度减法
原题链接
简单
作者:
想吃鱼的猫酱
,
2022-09-23 18:38:39
,
所有人可见
,
阅读 97
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.next();
String b = sc.next();
List<Integer> A = new ArrayList<>(a.length());
List<Integer> B = new ArrayList<>(b.length());
for (int i = a.length() - 1;i>=0;i--) {
A.add(a.charAt(i) - '0');
}
for (int i = b.length() - 1;i>=0;i--) {
B.add(b.charAt(i) - '0');
}
//由于要输出一个数,所以根据结果判断要不要输出负号
if (!cmp(A,B)) System.out.print("-");
List<Integer> C = sub(A,B);
for (int i = C.size() - 1; i >= 0 ; i--) {
System.out.print(C.get(i));
}
}
public static List<Integer> sub(List<Integer> A,List<Integer> B){
List<Integer> C = new ArrayList<>();
if (!cmp(A,B)) return sub(B,A);
//表示借位的标志位
int t = 0;
for (int i = 0; i < A.size(); i++) {
t = A.get(i) - t;
if (i < B.size()) t-= B.get(i);
C.add((t+10)%10);
if (t < 0) t = 1;
else t = 0;
}
//去掉多余的零
while(C.size() > 1 && C.get(C.size()-1) == 0 ) C.remove(C.size()-1);
return C;
}
//该项用于检测两个数到底哪个大
public static boolean cmp(List<Integer> A,List<Integer> B){
if (A.size() != B.size()) return A.size() > B.size();
for (int i = A.size() - 1; i >= 0; i--) {
if (A.get(i) != B.get(i)) return A.get(i) > B.get(i);
}
return true;
}
}