题干 输入两个正整数,结果可能为负

就是模拟列竖式,在这里我们可以简化的就是小数减大数,如果是这样我们可以先加入负号然后再进行大数减小数

#include<iostream>
#include<vector>
using namespace std;
string sa,***;
vector<int> a,b,c;
vector<int> reduce(vector<int> a,vector<int> b)
{
    vector<int> c;
    int t=0;
    for(int i=0;i<a.size();i++)
    {
    	if(i<a.size())t+=a[i];
        if(i<b.size())t-=b[i];
        c.push_back((t+10)%10);
        t=t<0?-1:0;
    }
    while(c.size()>1&&c.back()==0)c.pop_back();
    return c;
}
bool cmp(vector<int> a,vector<int> b)//比较两个数的大小
{
	if(a.size()!=b.size())return a.size()<b.size();//谁长度大谁大
    for(int i=a.size()-1;i>=0;i--)
    {
    	if(a[i]!=b[i])return a[i]<b[i];//相同位数的时候从高位到低位,谁先大谁大
    }
}
int main()
{
	cin>>sa>>***;
    bool flag=true;
    for(int i=sa.size()-1;i>=0;i--)
    	a.push_back(sa[i]-'0');
    for(int i=***.size()-1;i>=0;i--)
    	b.push_back(***[i]-'0');
    if(cmp(a,b)) //a比b小,要输出'-'号
    {
    	c=reduce(b,a);
        flag=0;
    }
    else c=reduce(a,b);
    if(!flag)cout<<'-';
    for(int i=c.size()-1;i>=0;i--)cout<<c[i];
    return 0;
}