当前位置: 代码迷 >> 综合 >> AcWing 792. 高精度减法
  详细解决方案

AcWing 792. 高精度减法

热度:13   发布时间:2024-02-05 18:32:25.0

给定两个正整数,计算它们的差,计算结果可能为负数。

输入格式

共两行,每行包含一个整数。

输出格式

共一行,包含所求的差。

数据范围

1≤整数长度≤1051≤整数长度≤105

输入样例:

32
11

输出样例:

21
//不难但是分情况讨论
import java.io.*;
import java.util.ArrayList;
class Main{static ArrayList<Integer> removeString(ArrayList<Integer> a, ArrayList<Integer> b){ArrayList<Integer> c = new ArrayList<>();for(int i = 0, t = 0; i < a.size(); ++i){t += a.get(i);if(i < b.size())t -= b.get(i);c.add((t + 10) % 10);if(t < 0)t = -1;else t = 0;}int size= c.size();while (c.size()>1 && c.get(c.size()-1) == 0)c.remove(c.size()-1);return c;}public static void main(String[] args)throws Exception{BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));String a = buf.readLine();String b = buf.readLine();ArrayList<Integer> list1 = new ArrayList<>();ArrayList<Integer> list2 = new ArrayList<>();for(int i = a.length() - 1; i >= 0; --i)list1.add(a.charAt(i) - '0');for(int i = b.length() - 1; i >= 0; --i)list2.add(b.charAt(i) - '0');ArrayList<Integer> list3 = null;int len1 = list1.size(), len2 = list2.size();if(len1 > len2){list3 = removeString(list1, list2);}else if(len1 < len2){list3 = removeString(list2, list1);System.out.print('-');}else{boolean flag = false;for(int i = len1 - 1; i >= 0; --i){if(list1.get(i) > list2.get(i)){flag = true;break;}else if(list1.get(i) < list2.get(i)){System.out.print('-');break;}}if(flag)list3 = removeString(list1, list2);else list3 = removeString(list2, list1);}for(int i = list3.size() - 1; i >=0; --i){System.out.print(list3.get(i));}}
}