高精度模板_C++
高精度压位,压9位
read:读入
write:输出
copy:赋值
change:交换
empty:清0
cmp:比较大小,相当于小于号
plus:加法
dec:减法
multy:乘法
除法实在不会写压位的……QuQ
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 typedef long long LL; 5 const int W=9,N=1000,w[W]={1,10,1e2,1e3,1e4,1e5,1e6,1e7,1e8},Max=1e9; 6 int c[N]; 7 char s[N*W]; 8 namespace bigint 9 { 10 inline void read(int *p) 11 { 12 int i,j,k; 13 for (s[j=1]=getchar();s[j]!=' '&&s[j]!='\n'&&s[j]!=EOF;s[++j]=getchar()); 14 for (i=0,k=W;j>1;*(p+i)+=w[k++]*(s[--j]-'0')) if (k==W) k=0,i++; 15 *p=i; 16 } 17 inline void write(int *p) 18 { 19 int i=*p,j; 20 printf("%d",*(p+*p)); 21 while (--i) 22 { 23 for (j=W;--j&&(*(p+i)<w[j]);) putchar('0'); 24 printf("%d",*(p+i)); 25 } 26 } 27 inline void copy(int *pa,int *pb) 28 { 29 int i; 30 for (i=0;i<=*pb;i++) *(pa+i)=*(pb+i); 31 } 32 inline void change(int *pa,int *pb) 33 { 34 int i,t=max(*pa,*pb); 35 for (i=0;i<=t;i++) swap(*(pa+i),*(pb+i)); 36 } 37 inline void empty(int *p) 38 { 39 int i; 40 for (i=1;i<=*p;i++) *(p+i)=0; 41 *p=0; 42 } 43 inline bool cmp(int *pa,int *pb) 44 { 45 if (*pa==*pb) 46 { 47 int i; 48 for (i=*pa;i;i--) 49 { 50 if (*(pa+i)==*(pb+i)) continue; 51 return *(pa+i)<*(pb+i); 52 } 53 } 54 return *pa<*pb; 55 } 56 inline void plus(int *p,int *pa,int *pb) 57 { 58 int i,t=max(*pa,*pb); 59 bool x=0; 60 for (i=1;i<=t;i++) 61 { 62 *(p+i)=*(pa+i)+*(pb+i)+x; 63 if (*(p+i)>=Max) 64 { 65 x=1; 66 *(p+i)-=Max; 67 } 68 else x=0; 69 } 70 *p=t; 71 if (x) *(p+(++(*p)))=1; 72 } 73 inline void dec(int *p,int *pa,int *pb) 74 { 75 bool k=0; 76 int i; 77 for (i=1;i<=*pa;i++) 78 { 79 *(p+i)=*(pa+i)-*(pb+i)-k; 80 if (*(p+i)<0) 81 { 82 *(p+i)+=Max; 83 k=1; 84 } 85 else k=0; 86 } 87 *p=*pa; 88 while (*(p+*p)==0) (*p)--; 89 } 90 inline void multy(int *p,int *pa,int *pb) 91 { 92 LL k; 93 int i,j; 94 for (i=1;i<=*pa;i++) 95 for (j=1;j<=*pb;j++) 96 { 97 k=(LL)(*(pa+i))*(*(pb+j)); 98 c[i+j-1]=k%Max; 99 c[i+j]=k/Max; 100 c[0]=i+j; 101 if (k<Max) c[0]--; 102 plus(p,p,c); 103 c[i+j-1]=0; 104 c[i+j]=0; 105 } 106 *p=c[0]; 107 } 108 } 109 int main() 110 { 111 112 return 0; 113 }