AcWing 792. 高精度减法
原题链接
简单
作者:
wangyj
,
2020-10-30 20:21:44
,
所有人可见
,
阅读 281
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int a[100005],i,fu=0,s,n1,n2,k,max,min;
memset(a,0,sizeof(a));
string m1,m2;
cin>>m1>>m2;
n1=m1.size();
n2=m2.size();
for(i=n1-1;i>=0;i--)a[n1-i-1]=m1[i]-'0';
for(i=n2-1;i>=0;i--){
s=a[n2-i-1]-(m2[i]-'0');
if(s>=0)a[n2-i-1]=s;
else{
if(n2-i>n1-1){
fu=1;
break;
}
a[n2-i-1]=s+10;
a[n2-i]--;
}
}
max=n1,min=n2;
if(fu){
for(i=n2-1;i>=0;i--)a[n2-i-1]=m2[i]-'0';
for(i=n1-1;i>=0;i--){
s=a[n1-i-1]-(m1[i]-'0');
if(s>=0)a[n1-i-1]=s;
else{
a[n1-i-1]=s+10;
a[n1-i]--;
}
}
max=n2,min=n1;
cout<<'-';
}
for(i=min;i<=max-1;i++){
if(a[i]<0){
a[i]+=10;
a[i+1]--;
}
}
k=0;
for(i=max;i>=0;i--){
if(a[i]>0){
k=i;
break;
}
}
for(i=k;i>=0;i--)printf("%d",a[i]);
printf("\n");
return 0;
}