AcWing 792. 高精度减法
原题链接
简单
作者:
Sankano
,
2021-10-23 08:05:55
,
所有人可见
,
阅读 221
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N],b[N],ans[N];
bool pd(int a[],int b[],int n,int m)
{
if(n>m) return false;
else if(n<m) return true;
for(int i=n,j=m;i>=0&&j>=0;i--,j--)
{
if(a[i]<b[j]) return true;
else if(a[i]>b[j]) return false;
}
return false;
}
int Add(int a[],int b[],int n)
{
int tmp=0;
for(int i=0;i<n;i++){
tmp+=a[i]-b[i];
if(tmp<0) ans[i]=tmp+10,tmp=-1;
else ans[i]=tmp,tmp=0;
}
if(tmp) ans[n++]=tmp;
return n;
}
int main(){
string s1,s2; cin>>s1>>s2;
int n=0,m=0; int cnt;
for(int i=s1.size()-1;i>=0;i--) a[n++]=s1[i]-'0';
for(int i=s2.size()-1;i>=0;i--) b[m++]=s2[i]-'0';
bool flag=pd(a,b,n,m);
n=max(n,m);
if(flag){
cnt=Add(b,a,n)-1;
cout<<"-";
}
else cnt=Add(a,b,n)-1;
while(!ans[cnt]&&cnt>=1) cnt--;
for(;cnt>=0;cnt--) cout<<ans[cnt];
return 0;
}
可以考虑使用vector
嗯,是的