key
- 检查减数和被减数的大小,大的放前,小的放后
- 确定结果是正数,还是负数,即符号位
- 从低位开始减
- 如果a[i]<b[i],则向高位借1当10,a[i+1]–;a[i]+=10
#include <iostream>
#include<cstring>
using namespace std;
void whoisbig(int a[],int b[],int* flag){
if(a[0]<b[0]){
*flag=1;
}
if(a[0]==b[0]){
int i=a[0];
while(i>0){
if(a[i]<b[i]){
*flag=1;
break;
}
--i;
}
}
}
void a_i(char* a,int * b){
b[0]=strlen(a);
for(int i=b[0];i>0;--i){
b[b[0]-i+1]=a[i-1]-'0';
}
}
int main(){
char s1[10090],s2[10090];
int* p,*q;
int a[10090],b[10090],c[10090];
int flag=0;
scanf("%s",s1);
scanf("%s",s2);
a_i(s1,a);
a_i(s2,b);
p=a;
q=b;
whoisbig(p,q,&flag);
if(flag==1){
p=b;
q=a;
}
c[0]=max(a[0],b[0]);
for(int i=1;i<=c[0];i++){
c[i]=p[i]-q[i];
if(p[i]<q[i]){
c[i]+=10;
p[i+1]--;
}
}
while(c[c[0]]==0 && c[0]>1) c[0]-=1;
if(flag==1)
cout<<"-";
for(int i= c[0];i>0;--i)
printf("%d",c[i]);
return 0;
}