终于会了,233
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 struct bign 6 { 7 int len; 8 int num[1501]; 9 bool flag; 10 bign(){len=1;flag=0;memset(num,0,sizeof num);} 11 bign(int x) 12 { 13 if(!x)return; 14 len=0; 15 while(x) 16 { 17 num[++len]=x%10;x/=10; 18 } 19 } 20 }; 21 bool operator < (bign a,bign b) 22 { 23 if(a.len<b.len)return 1; 24 if(a.len>b.len)return 0; 25 for(int i=a.len;i>=1;i--) 26 if(a.num[i]>b.num[i])return 0; 27 return 1; 28 } 29 bool operator == (bign a,bign b) 30 { 31 if(a.len!=b.len)return 0; 32 for(int i=1;i<=a.len;i++) 33 if(a.num[i]!=b.num[i])return 0; 34 return 1; 35 } 36 bign operator +(bign &A,bign &B) 37 { 38 bign ret; 39 int i=1,x=0; 40 while(i<=A.len || i<=B.len) 41 { 42 ret.num[i]=A.num[i]+B.num[i]+x; 43 x=ret.num[i]/10; 44 ret.num[i]%=10; 45 i++; 46 } 47 ret.num[i]=x; 48 ret.len=i; 49 if(!ret.num[ret.len])ret.len--; 50 return ret; 51 } 52 bign operator * (bign a,bign b) 53 { 54 bign ans; 55 int len=a.len+b.len; 56 for(int i=1;i<=a.len;i++) 57 { 58 int x=0; 59 for(int j=1;j<=b.len;j++) 60 { 61 ans.num[i+j-1]+=(a.num[i]*b.num[j]+x); 62 x=ans.num[i+j-1]/10; 63 ans.num[i+j-1]%=10; 64 } 65 ans.num[i+b.len]+=x; 66 } 67 while(!ans.num[len] && len>1)len--; 68 ans.len=len; 69 return ans; 70 } 71 bign operator - (bign a,bign b) 72 { 73 bign ans; 74 if(a==b)return ans; 75 if(b<a) 76 { 77 for(int i=1;i<=a.len;i++) 78 { 79 if(a.num[i]<0) 80 a.num[i]+=10,a.num[i+1]--; 81 ans.num[i]=a.num[i]-b.num[i]; 82 if(ans.num[i]<0) 83 { 84 ans.num[i]+=10; 85 a.num[i+1]--;//向a的高位借位 86 } 87 } 88 } 89 else 90 { 91 ans.flag=1;// this number(I mean the ans) is smaller than zero 92 for(int i=1;i<=b.len;i++) 93 { 94 if(b.num[i]<0) 95 { 96 b.num[i]+=10;b.num[i+1]--; 97 } 98 ans.num[i]=b.num[i]-a.num[i]; 99 if(ans.num[i]<0) 100 { 101 ans.num[i]+=10; 102 b.num[i+1]--; 103 } 104 } 105 } 106 int len=max(a.len,b.len); 107 while(ans.num[len]<=0 && len>1)len--; 108 ans.len=len; 109 return ans; 110 } 111 bign get() 112 { 113 bign ans; 114 string s; 115 cin>>s; 116 int l=s.length(); 117 ans.len=l; 118 for(int i=0;i<ans.len;i++)ans.num[ans.len-i]=s[i]-48; 119 return ans; 120 } 121 void out(bign x) 122 { 123 if(x.flag)cout<<"-"; 124 for(int i=x.len;i>=1;i--) 125 { 126 cout<<x.num[i]; 127 } 128 } 129 int main() 130 { 131 return 0; 132 }
时间: 2024-12-11 19:31:32