高精度模板
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 }
需要注意的是数组的初始化