题目描述
给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的差。
数据范围
1≤整数长度≤105
样例
输入样例:
32
11
输出样例:
21
java 代码–转为字符串做
import java.util.*;
public class Main{
//比较两个数的大小,大数-小数
public static boolean compare(String a,String b){
int lena=a.length();
int lenb=b.length();
if(lena>lenb){
return true;
}else if(lenb>lena){
return false;
}else{ //长度相同
int i=0;
while(i<lena){
int cha=a.charAt(i)-'0';
int chb=b.charAt(i)-'0';
if(cha>chb){
return true;
}
if(cha<chb){
return false;
}
i++;
}
}
return true; //两个数一样大
}
public static String sub(String a,String b){
List<Integer> list=new ArrayList<>();
int lena=a.length();
int lenb=b.length();
int i=lena-1;
int j=lenb-1;
int tmp=0; //借位
int sub=0; //差
while(i>=0){
int ai=i>=0?a.charAt(i)-'0':0; // 如果已经遍历完 a,则将 ai 置为 0
int bj=j>=0?b.charAt(j)-'0':0; // 如果已经遍历完 b,则将 bj 置为 0
if(ai-bj>0){
sub=ai-bj-tmp;
list.add(sub);
tmp=0;
}else if(ai-bj<0){
sub=ai-bj+10-tmp; //<0 借一位+10
list.add(sub);
tmp=1;
}else{
if(tmp==0){ //相等无借位
sub=ai-bj-tmp;
list.add(sub);
tmp=0;
}else{
sub=ai-bj+10-tmp; //相等有借位
list.add(sub);
tmp=1;
}
}
i--;
j--;
}
// 去除结果开头的多余的0
while(list.size()>1&&list.get(list.size()-1)== 0){
list.remove(list.size()-1);
}
StringBuilder sb=new StringBuilder();
for(int k=list.size()-1;k>=0;k--){
sb.append(list.get(k));
}
return sb.toString();
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String a=sc.nextLine();
String b=sc.nextLine();
//判断a,b的大小
if(compare(a,b)){
String ret=sub(a,b);
System.out.println(ret);
return;
}else{
String tmp=a;
a=b;
b=tmp;
String ret=sub(a,b);
System.out.println("-"+ret);
return;
}
}
}