题干 输入两个正整数,结果可能为负
就是模拟列竖式,在这里我们可以简化的就是小数减大数,如果是这样我们可以先加入负号然后再进行大数减小数
#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;
}