题目描述
高精度减法
输入输出格式
输入格式:
两个整数a,b(第二个可能比第一个大)
输出格式:
结果(是负数要输出负号)
输入输出样例
输入:
2
1
输出:
1
说明
20%数据a,b在long long范围内
100%数据0<a,b<=10的10000次方
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int a[100011]={0},b[100011]={0},c[100011]={0};
int main(){
string str1,str2;
cin>>str1;
cin>>str2;
if(str1==str2){
cout<<0;
return 0;
}
int n1=str1.length();
int n2=str2.length();
int flag=0;
if(n2>n1){//这一步是判断那个数长,哪个就大
swap(str1,str2);
flag=1;
}
if(n1==n2){
for(int i=0;i<n2;++i){
if(str1[i]-str2[i]<0){
flag=1;
swap(str1,str2);
break;
}
}
}
if(flag)cout<<'-';
// if(!(n1>n2)&&!flag){
// cout<<0;
// return 1;
// }
// cout<<"str1:"<<str1<<endl;
// cout<<"str2:"<<str2<<endl;
int lena,lenb,lenc;
lena=str1.length();
lenb=str2.length();
for(int i=0;i<lena;++i)
a[lena-i]=str1[i]-'0';
for(int i=0;i<lenb;++i)
b[lenb-i]=str2[i]-'0';
int len=max(lena,lenb);
int index=1;
while(index<=len){
int temp= a[index]-b[index];
if(temp<0){
c[index]=temp+10;
a[index+1]--;
}else{
c[index]=temp;
}
index++;
}
int t=len;
for(int i=len;i>0;i--){
if(c[i]){
t=i;
break;
}
}
for(int i=t;i>0;i--)
cout<<c[i];
cout<<endl;
return 0;
}