标签:style blog io color os 使用 for sp div
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 struct bign{ 6 int len; 7 int num[1501]; 8 bool flag; 9 bign(){len=1;flag=0;memset(num,0,sizeof num);} 10 bign(int x){ 11 if(!x)return; 12 len=0; 13 while(x)num[++len]=x%10;x/=10; 14 } 15 }; 16 bool operator < (bign a,bign b){ 17 if(a.len<b.len)return 1; 18 if(a.len>b.len)return 0; 19 for(int i=a.len;i>=1;i--)if(a.num[i]>b.num[i])return 0; 20 return 1; 21 } 22 bool operator == (bign a,bign b){ 23 if(a.len!=b.len)return 0; 24 for(int i=1;i<=a.len;i++)if(a.num[i]!=b.num[i])return 0; 25 return 1; 26 } 27 bign operator +(bign &A,bign &B){ 28 bign ret; 29 int i=1,x=0; 30 while(i<=A.len || i<=B.len){ 31 ret.num[i]=A.num[i]+B.num[i]+x; 32 x=ret.num[i]/10; ret.num[i]%=10; i++; 33 } 34 ret.num[i]=x; ret.len=i; 35 if(!ret.num[ret.len])ret.len--; 36 return ret; 37 } 38 bign operator * (bign a,bign b){ 39 bign ans; 40 int len=a.len+b.len; 41 for(int i=1;i<=a.len;i++){ 42 int x=0; 43 for(int j=1;j<=b.len;j++){ 44 ans.num[i+j-1]+=(a.num[i]*b.num[j]+x); 45 x=ans.num[i+j-1]/10; 46 ans.num[i+j-1]%=10; 47 } 48 ans.num[i+b.len]+=x; 49 } 50 while(!ans.num[len] && len>1)len--; 51 ans.len=len; 52 return ans; 53 } 54 bign operator - (bign a,bign b){ 55 bign ans; 56 if(a==b)return ans; 57 if(b<a){ 58 for(int i=1;i<=a.len;i++){ 59 if(a.num[i]<0)a.num[i]+=10,a.num[i+1]--; 60 ans.num[i]=a.num[i]-b.num[i]; 61 if(ans.num[i]<0){ 62 ans.num[i]+=10; a.num[i+1]--;//向a的高位借位 63 } 64 } 65 } 66 else{ 67 ans.flag=1;// this number(I mean the ans) is smaller than zero 68 for(int i=1;i<=b.len;i++){ 69 if(b.num[i]<0){ 70 b.num[i]+=10; b.num[i+1]--; 71 } 72 ans.num[i]=b.num[i]-a.num[i]; 73 if(ans.num[i]<0){ 74 ans.num[i]+=10; b.num[i+1]--; 75 } 76 } 77 } 78 int len=max(a.len,b.len); 79 while(ans.num[len]<=0 && len>1)len--; 80 ans.len=len; 81 return ans; 82 }
注:本代码已略去bign读入、输出函数(很简单,不必使用函数),主函数已省去~
标签:style blog io color os 使用 for sp div
原文地址:http://www.cnblogs.com/Skyvot/p/4072676.html