高精度常用操作

 1 void jia(ll *a,ll *b) //加法 
 2 {
 3     tmp[0]=max(a[0],b[0]);
 4     tx=0;
 5     for(ll i=1;i<=tmp[0]+3;++i) tmp[i]=0;
 6     for(ll i=1;i<=tmp[0];++i)
 7     {
 8         tmp[i]=(tx+a[i]+b[i])%10;
 9         tx=(tx+a[i]+b[i])/10;
10     } 
11     if(tx)
12     {
13         tmp[0]++;
14         tmp[tmp[0]]=tx;
15     }
16     while(tmp[tmp[0]]==0&&tmp[0]>1) tmp[0]--;
17     for(int i=0;i<=tmp[0];++i) a[i]=tmp[i];
18 }
19 void jian(ll *a,ll *b)//减法
20 {
21     tmp[0]=max(a[0],b[0]);
22     tx=0;
23     for(ll i=1;i<=tmp[0]+3;++i) tmp[i]=0;
24     for(ll i=1;i<=tmp[0];++i)
25     {
26         tmp[i]=a[i]-b[i]+tx;
27         if(tmp[i]<0)
28         {
29             tmp[i]+=10;tx=-1;
30         }else tx=0;
31     }
32     while(tmp[tmp[0]]==0&&tmp[0]>1) tmp[0]--;
33     for(int i=0;i<=tmp[0];++i) a[i]=tmp[i];
34 }

 此为倒序:

例子:in:120098

a:123456

   890021

 

 1 void chu(ll *a,ll *p,ll u)//a[]/u
 2 {
 3     g[0]=a[0];tx=0;
 4     for(ll i=1;i<=g[0]+3;++i) g[i]=0;
 5     for(int i=g[0];i>=1;--i)
 6     {
 7         tx=tx*10+a[i];
 8         g[i]=tx/u;
 9         tx%=u; 
10     }
11     while(g[g[0]]==0&&g[0]>1) g[0]--;
12     for(ll i=0;i<=g[0];++i) a[i]=g[i];
13 }  

 

posted @ 2018-10-28 11:48  月亮茶  阅读(257)  评论(0编辑  收藏  举报