只考虑非负数的减法
具体细节见代码
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<iostream> 5 using namespace std;
6 struct bignum{ 7 int y[50005];//y指倒存的数字 8 bignum() 9 {memset(y,0,sizeof(y));} 10 bool operator < (const bignum x)const//判断大小 11 { 12 if(y[0]!=x.y[0]) return y[0]<x.y[0];//先比长度 13 for(int i=y[0];i>=1;i--) 14 if(y[i]!=x.y[i]) return y[i]<x.y[i]; 15 return false;//此时二者相等 16 }
17 bignum operator - (const bignum x) const 18 { 19 bignum re;re.y[0]=y[0]; 20 for(int i=1;i<=y[0];i++) 21 { 22 re.y[i]+=y[i]-x.y[i]; 23 while(re.y[i]<0) re.y[i]+=10,re.y[i+1]-=1; 24 } 25 while(!re.y[re.y[0]] and re.y[0]>1) re.y[0]--; 26 //re.y[0]>1指如果答案0 则保留一位 27 return re; 28 } 29 };
30 string b1,b2; 31 bignum q,w,c;
32 int main() 33 { 34 cin>>b1>>b2; 35 q.y[0]=b1.size(),w.y[0]=b2.size();
36 for(int i=0;i<q.y[0];i++) q.y[i+1]=b1[i]-'0'; 37 for(int i=0;i<w.y[0];i++) w.y[i+1]=b2[i]-'0'; 38 reverse(q.y+1,q.y+1+q.y[0]); 39 reverse(w.y+1,w.y+1+w.y[0]); 40 41 if(q<w) putchar('-'),c=w-q; 42 else c=q-w; 43 44 reverse(c.y+1,c.y+1+c.y[0]); 45 for(int i=1;i<=c.y[0];i++) printf("%d",c.y[i]);
46 return 0; 47 }