本蒟蒻想写一段能处理任何形式的高减,但写了一半在调时发现错了,跳不出来。
#include<bits/stdc++.h>
using namespace std;
int da[10000],db[10000],dc[10000];
int main(){
string a,b;
cin>>a>>b;
int lena=a.size(),lenb=b.size(),lenc=max(lena,lenb);
if(a[0]=='-'&&b[0]=='-'&&a<b){
for(int i=1;i<lena;i++) da[i]=a[lena-i-1]-'0';
for(int i=1;i<lenb;i++) db[i]=b[lenb-i-1]-'0';
for(int i=1;i<lenc;i++){
dc[i]+=db[i]-da[i];
if(dc[i]<0)
{
dc[i+1]-=1;
dc[i]+=10;
}
if (dc[lenc]) ++lenc;
while(lenc>0&&dc[lenc-1]==0) lenc--;
for(int i=lenc-1;i>=0;i--) cout<<dc[i];
}
}else if(a[0]!='-'&&b[0]!='-'){
for(int i=0;i<lena;i++) da[i]=a[lena-i-1]-'0';
for(int i=0;i<lenb;i++) db[i]=b[lenb-i-1]-'0';
for(int i=0;i<lenc;i++){
dc[i]+=da[i]-db[i];
if(dc[i]<0)
{
dc[i+1]-=1;
dc[i]+=10;
}
}
if (dc[lenc]) ++lenc;
while(lenc>0&&dc[lenc-1]==0) lenc--;
for(int i=lenc-1;i>=0;i--) cout<<dc[i];
}else if(a[0]=='-'&&b[0]=='-'&&a>b){
for(int i=0;i<lena;i++) da[i]=a[lena-i-1]-'0';
for(int i=0;i<lenb;i++) db[i]=b[lenb-i-1]-'0';
for(int i=0;i<lenc;i++){
dc[i]+=da[i]-db[i];
if(dc[i]<0)
{
dc[i+1]-=1;
dc[i]+=10;
}
}
if (dc[lenc]) ++lenc;
while(lenc>0&&dc[lenc-1]==0) lenc--;
cout<<"-";
for(int i=lenc-1;i>=0;i--) cout<<dc[i];
}else if(a[0]!='-'&&b[0]=='-'){
for(int i=0;i<lena;i++) da[i]=a[lena-i-1]-'0';
for(int i=1;i<lenb;i++) db[i]=b[lenb-i-1]-'0';
for(int i=0;i<lenc;i++){
dc[i]+=da[i]+db[i];
if(dc[i]>9)
{
dc[i+1]+=1;
dc[i]-=10;
}
}
if (dc[lenc]) ++lenc;
while(lenc>0&&dc[lenc-1]==0) lenc--;
for(int i=lenc-1;i>=0;i--) cout<<dc[i];
}
}