#include<iostream>
using namespace std;
int sub[1000010],sub1[1000010],e[1000010],t[1000010];
int main ()
{
int i,j;
string s,s1;
cin>>s>>s1;
int cnt=0,cnt1=0;
for(i=s.length()-1;i>=0;i--) sub[cnt++]=s[i]-'0';
for(j=s1.length()-1;j>=0;j--) sub1[cnt1++]=s1[j]-'0';
int m=max(s.length(),s1.length());
if(s.length()>s1.length())
{
for(i=0;i<s.length();i++)
{
if(sub[i]-sub1[i]-t[i]>=0)
{
t[i+1]=0;
e[i]=sub[i]-sub1[i]-t[i];
}
else
{
t[i+1]=1;
e[i]=10+sub[i]-sub1[i]-t[i];
}
}
while(1)
if(e[m]==0) m--;
else break;
for(i=m;i>=0;i--) cout<<e[i];
}
else if(s.length()==s1.length())
{
bool sym=0,sym1=0;
for(i=s.length()-1;i>=0;i--)
{
if(sub[i]>sub1[i])
{
sym=1;
break;
}
else if(sub[i]<sub1[i]) break;
else if(sub[i]==sub1[i]&&i==0)
{
sym1=1;
break;
}
else continue;
}
if(sym1) cout<<0;
else
{
if(sym)
{
for(i=0;i<s.length();i++)
if(sub[i]-sub1[i]-t[i]>=0)
{
t[i+1]=0;
e[i]=sub[i]-sub1[i]-t[i];
}
else
{
t[i+1]=1;
e[i]=10+sub[i]-sub1[i]-t[i];
}
while(1)
if(e[m]==0) m--;
else break;
for(i=m;i>=0;i--)
cout<<e[i];
}
else
{
for(i=0;i<s.length();i++)
{
if(sub1[i]-sub[i]-t[i]>=0)
{
t[i+1]=0;
e[i]=sub1[i]-sub[i]-t[i];
}
else
{
t[i+1]=1;
e[i]=10+sub1[i]-sub[i]-t[i];
}
}
while(1)
if(e[m]==0) m--;
else break;
cout<<"-";
for(i=m;i>=0;i--) cout<<e[i];
}
}
}
else
{
for(i=0;i<s1.length();i++)
if(sub1[i]-sub[i]-t[i]>=0)
{
t[i+1]=0;
e[i]=sub1[i]-sub[i]-t[i];
}
else
{
t[i+1]=1;
e[i]=10+sub1[i]-sub[i]-t[i];
}
while(1)
if(e[m]==0) m--;
else break;
cout<<"-";
for(i=m;i>=0;i--) cout<<e[i];
}
return 0;
}
高精度减法
最新推荐文章于 2024-08-22 17:27:46 发布
该程序用于比较两个字符串,并根据它们的差异输出结果。首先从后往前将字符串转换为整数数组,然后进行逐位比较。如果第一个字符串长度大于第二个,将从第一个字符串中减去第二个字符串并输出结果;如果长度相等,则根据字符大小进行比较;如果第一个字符串长度小于第二个,同样进行计算并前缀负号。
摘要由CSDN通过智能技术生成