两个大于等于零的
q<p的话就swap(比较大小需要长度
去除前置零
若q<p 输出负号“-”
单独输出特殊情况0
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int a[11000],b[11000],la,lb;
string q,p;
bool pd;
void subtraction(int a[],int b[]){
int c[11000]={
},mxl=max(la,lb);
for(int i=0;i<la||i<lb;i++){
if(a[i]<b[i]){
a[i+1]--;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
while(c[mxl]==0&&mxl>=0)mxl--;
if(pd)cout<<"-";
for(int i=mxl;i>=0;i--)cout<<c[i];
if(mxl==-1)cout<<"0";
}
int main(){
cin>>q>>p;
if((q<p&&q.size()==p.size())||q.size()<p.size()){
swap(q,p);//
pd=true;
}
la=q.size(),lb=p.size();
for(int i=0;i<la;i++)a[i]=q[la-i-1]-'0';
for(int i=0;i<lb;i++)b[i]=p[lb-i-1]-'0';
subtraction(a,b);
return 0;
}