標籤:i++ namespace 代碼 span 長度 algorithm ret include lse
只考慮非負數的減法
具體細節見代碼
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) const18 {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 }
高精度減法