#include<iostream>
#include<string>//STL重度依赖症
#include<algorithm>//reverse
using namespace std;
class bignum{
public:
string add(string s1,string s2)
{
string ans="";//答案
if(s1.size()<s2.size())
for(int p=s1.size()-1;p<=s2.size()-2;p++)s1="0"+s1;
if(s1.size()>s2.size())
for(int p=s2.size()-1;p<=s1.size()-2;p++)s2="0"+s2;
reverse(s1.begin(),s1.end());//简结的反转
reverse(s2.begin(),s2.end());//简洁的反转
int a=0,b=0,c=0,s;
for(int p=0;p<=s1.size()-1;p++)
{
a=s1[p]-'0',b=s2[p]-'0',s=a+b+c;
if(s>=10)c=1,s%=10;
else c=0;
ans=char(s+'0')+ans;
}
if(c==1)
ans=char(c+'0')+ans;
return ans;
}
string sub(string s1,string s2)
{
string temp=cmp(s1,s2),ans="",answer="";//temp是大的家伙,ans是答案
bool flag=0;//负数标记
int id;
if(temp==s2&&s1!=s2)swap(s1,s2),flag=1;//被减数>减数
if(s1==s2)return "0";
//下面是+0
if(s1.size()<s2.size())
for(int p=s1.size()-1;p<=s2.size()-2;p++)s1="0"+s1;
if(s1.size()>s2.size())
for(int p=s2.size()-1;p<=s1.size()-2;p++)s2="0"+s2;
//下面是简洁的反转
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
//下面是核心
int a,b;//a是被减数数位,b是减数数位。
cout<<s1<<' '<<s2<<endl;
for(int p=0;p<=s1.size()-1;p++)//枚举每个被减数数位
{
a=s1[p]-'0';
b=s2[p]-'0';
if(a<b)a+=10,s1[p+1]--;
ans=char(a-b+'0')+ans;
}
for(id=0;id<=ans.size()-1;id++)
if(ans[id]!='0')break;
ans.erase(0,id);
if(flag)ans="-"+ans;
return ans;
}
private:
string cmp(string s1,string s2)
{
if(s1.size()>s2.size())return s1;
else
{
if(s1.size()<s2.size())return s2;
else if(s1==s2)return s1;
else for(int p=0;p<=s1.size()-1;p++)
{
if(s1[p]>s2[p]){return s1;}
if(s1[p]<s2[p]){return s2;}
}
}
}
};
int main()
{
string s1,s2;
cin>>s1>>s2;
bignum BIG;//看,多简洁明了
cout<<BIG.sub(s1,s2)<<endl;
}
不要注意我的add函数这不重要