高精度模板

 1 //高精度预处理
 2 scanf("%s",s);
 3 n=strlen(s);
 4 for(i=1;i<=n;i++)   //字符串处理
 5 a[n-i+1]=s[i-1]-48;
 6 a[0]=n;   //a[0]存储第一个数的长度
 7 scanf("%s",s);
 8     n=strlen(s);
 9     for(i=1;i<=n;i++)
10         b[n-i+1]=s[i-1]-48;
11     b[0]=n;   //b[0]存储第二个数的长度
 1 //高精度加法
 2 void plus(int *a,int *b)
 3 {
 4     int i,l;
 5 //    memset(c,0,sizeof(c));
 6     if (a[0]>b[0]) l=a[0]; else l=b[0];
 7     for(i=1;i<=l;i++)
 8     {
 9         c[i]=c[i]+a[i]+b[i];
10         if (c[i]>=10) 
11         {
12             c[i]-=10;
13             c[i+1]++;
14         }
15     }
16     if(c[l+1]>0) l++;
17     c[0]=l;
18 }
 1 高精度减法
 2 1、调用方法:
 3 a0=a[n];
 4 b0=b[n];
 5 if((a[0]>b[0])||((a[0]=b[0])&&(a0>b0)))
 6     minus(a,b);
 7     else {printf("-");minus(b,a);}
 8 2、函数
 9 void minus(int *a,int *b)
10 {
11     int l,i;
12     if(a[0]>b[0])l=a[0];else l=b[0];
13     memset(c,0,sizeof(c));
14     for(i=1;i<=l;i++)
15     {
16         c[i]+=a[i]-b[i];
17         if(c[i]<0)
18         {
19             c[i]+=10;
20             c[i+1]-=1;
21         }
22     }
23     while(l>1&&c[l]==0)l--;
24     c[0]=l;
25 }
 1 高精度乘法
 2 void multiply(long q)
 3 {
 4     int i,l;
 5     l=a[0];
 6     for(i=1;i<=a[0];i++)
 7     {
 8         b[i]+=a[i]*q;
 9         b[i+1]+=(a[i]*q)/10;
10         b[i]%=10;
11     }
12     l++;
13     while(b[l]>=10)
14     {
15         b[l+1]=b[l]/10;
16         b[l]%=10;
17         l++;
18     }
19     while(l>1&&b[l]==0) l--;
20     b[0]=l;
21 }

需要注意的是数组的初始化

posted @ 2013-05-10 14:37  飞向梦  阅读(186)  评论(0编辑  收藏  举报