#大整数减法
大整数减法和大整数加法的思想其实是差不多的,只是注意不要输出前导0就行了。
传入的参数和返回值均为string类型,省略头文件。
输入的a>=b,即不考虑相减后为负值的情况。
const int M=2e5+5;
const int INF=0x3f3f3f3f;
int numa[M],numb[M],numc[M];
string sub(string a,string b)
{
string ans;
int la=a.size(),lb=b.size();
for(int i=0;i<la;i++)
numa[la-i-1]=a[i]-'0';//倒置
for(int i=0;i<lb;i++)
numb[lb-i-1]=b[i]-'0';
int lc=max(la,lb);
for(int i=0;i<lc;i++)
{
if(numa[i]<numb[i])
{
numa[i]+=10;
numa[i+1]--;
}
numc[i]=numa[i]-numb[i];
}
for(int i=lc-1;i>=0;i--)//除前导0且存答案
{
if(numc[i]!=0)
{
for(int j=i;j>=0;j--)
{
ans+=numc[j]+'0';
}
return ans;
}
}
return "0";//如果结果为0,返回0;
}
int main()
{
IOS;
string a,b;
cin>>a>>b;
cout<<sub(a,b)<<endl;
}