关键在于处理减后结果开头的几个0
#include<iostream>
#include<cstring>
using namespace std;
//减法还需要判断大小,无需carry
struct T {
int d[1000];
int len;
T() {
memset(d,0,sizeof(d));
len = 0;
}
};
T TOint(char a[]) {
T c;
int len = strlen(a);
for(int i = 0; i < len; i++) {
c.d[i] = a[len-1-i] - '0';
}
c.len = len;
return c;
}
T jian(T a,T b) {
T ans;
for(int i = 0; i < a.len; i++) {
if(a.d[i] < b.d[i]) {
a.d[i+1] --;
a.d[i]+=10;
}
ans.d[ans.len++] = a.d[i] - b.d[i];
}
//不用担心carry、等问题,,都会存到,最多减0
//也要考虑多个0位在开始端
while(ans.len >= 2&&ans.d[ans.len - 1]==0){
ans.len--;
}
return ans;
}
int main() {
int N,M;
char a[1000];
char b[1000];
gets(a);
gets(b);
T aa = TOint(a);
T bb = TOint(b);
T ans = jian(aa,bb);
for(int i =ans.len-1;i >=0 ;i--){
printf("%d",ans.d[i]);
}
}