踩的坑
判断前导0的情况一波三折
ArrayList 的subList(start,end) 的方法
返回的是数组中的[start,end)区间
其次返回的类型是List 不是ArrayList 怎么还有这么不智能的情况
最后就是记得保留1位
忘了答案是0的情况,导致我过了12点才调通。。。。
Java代码
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String a = scanner.next();
String b = scanner.next();
ArrayList<Integer> aa = new ArrayList<Integer>();
ArrayList<Integer> bb = new ArrayList<Integer>();
for (int i = a.length() - 1; i >= 0; i--){
aa.add(a.charAt(i) - '0');
}
for (int j = b.length() - 1; j >= 0; j-- ){
bb.add(b.charAt(j) - '0');
}
if (cmp(aa,bb)){
List<Integer> c = sub(aa,bb);
for(int k = c.size() - 1; k >= 0 ; k--){
System.out.print(c.get(k));
}
}
else {
System.out.print('-');
List<Integer> c = sub(bb,aa);
for(int k = c.size() - 1; k >= 0 ; k--){
System.out.print(c.get(k));
}
}
}
public static boolean cmp(ArrayList<Integer> aa, ArrayList<Integer> bb){
if(aa.size() != bb.size()){
return aa.size() > bb.size();
}
else{
for(int i = aa.size() - 1; i >= 0; i--){
if(aa.get(i) != bb.get(i)){
return aa.get(i) > bb.get(i);
}
}
}
return true;
}
public static List<Integer> sub(ArrayList<Integer> aa,ArrayList<Integer> bb){
ArrayList<Integer> c = new ArrayList<Integer>();
for(int i = 0, t = 0; i < aa.size(); i++){
t = aa.get(i) - t;
if ( i < bb.size()) t -= bb.get(i);
c.add((t + 10) % 10);
if ( t < 0) t = 1;
else t = 0;
}
int i = 0;
while(i < c.size() - 1){
if(c.get(i) == 0){
i++;
}
else break;
}
return c.subList(i, c.size());
}
}
给你看看我的版本
和我一样
JAVA大整形类,方便快捷。