zoukankan      html  css  js  c++  java
  • 高精度模板_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]!='
    '&&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 }
  • 相关阅读:
    那些书本上不曾告诉你的秘密
    附件十四面的数学模型与自动化算法分析
    ICAO 附件十四面课件分享
    风螺旋线的公式与特性
    How to describe the wind sprial in computer system?
    性能分析中看到螺旋线的影子
    风螺旋线的画法比较(三)
    风螺旋线的画法比较(二)
    风螺旋线的画法比较(一)
    网卡工作原理和wireshark混杂模式
  • 原文地址:https://www.cnblogs.com/hadilo/p/6063791.html
Copyright © 2011-2022 走看看