高精度模板

高精加:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 
 5 #define N 1000
 6 
 7 using namespace std;
 8 
 9 int a[N],b[N],c[N];
10 char as[N],bs[N];
11 int al,bl,cl;;
12 
13 int main()
14   {
15       cin>>as;
16       cin>>bs;
17       al=strlen(as);
18       bl=strlen(bs);
19       for(int i=al-1;i>=0;i--)
20         a[al-i]=as[i]-'0';
21       for(int i=bl-1;i>=0;i--)
22         b[bl-i]=bs[i]-'0';
23       for(int i=1;i<=max(al,bl);i++)
24         c[i]=a[i]+b[i];
25       cl=max(al,bl);
26       for(int i=1;i<=cl;i++)
27         if(c[i]>=10)
28           {
29               c[i+1]+=1;
30               c[i]%=10;
31           }
32     if(c[cl+1]!=0)
33       cl++;
34     for(int i=cl;i>=1;i--)
35       printf("%d",c[i]);
36       return 0;
37   }

 

高精减:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 
 5 #define N 1000
 6 
 7 using namespace std; 
 8 
 9 char as[N],bs[N],cs[N];
10 int a[N],b[N],c[N];
11 int al,bl,cl;
12 
13 void jiaohuan()
14   {
15       printf("-");
16       int p=al;
17       al=bl;
18       bl=p;
19       strcpy(cs,as);
20       strcpy(as,bs);
21       strcpy(bs,cs);
22       memset(c,0,sizeof(c));
23   }
24 
25 int main()
26   {
27       cin>>as;
28       cin>>bs;
29       al=strlen(as);
30       bl=strlen(bs);
31       if(bl>al||(al==bl&&strcmp(as,bs)<0))
32         jiaohuan();
33       for(int i=al-1;i>=0;i--)
34         a[al-i]=as[i]-'0';
35       for(int i=bl-1;i>=0;i--)
36         b[bl-i]=bs[i]-'0';
37       cl=max(al,bl);
38       for(int i=1;i<=cl;i++)
39         c[i]=a[i]-b[i];
40       for(int i=1;i<=cl;i++)
41         if(c[i]<0)
42           {
43               c[i]+=10;
44               c[i+1]--;
45           }
46       if(c[cl]<=0)
47         cl--;
48       for(int i=cl;i>0;i--)
49         if(c[i]>0)
50           printf("%d",c[i]);
51         else
52           printf("0");
53       return 0;
54   }

 

高精乘:

#include<cstdio>
#include<iostream>
#include<cstring>

#define N 500*500+10

using namespace std;

char as[N],bs[N],cs[N];
int a[N],b[N],c[N];
int al,bl,cl;

int main()
  {
      cin>>as;
      cin>>bs;
      al=strlen(as);
      bl=strlen(bs);
      for(int i=al-1;i>=0;i--)
        a[al-i]=as[i]-'0';
      for(int i=bl-1;i>=0;i--)
        b[bl-i]=bs[i]-'0';
      for(int i=1;i<=al;i++)
        {
            int x=0;
            for(int j=1;j<=bl;j++)
              {
                  c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
                  x=c[i+j-1]/10;
                  c[i+j-1]%=10;
              }
        c[i+bl]=x;
        }
      cl=al+bl;
      while(c[cl]==0&&cl>1)
        cl--;
      for(int i=cl;i>0;i--)
        printf("%d",c[i]);
      return 0;
   } 

 

高精除(高精除单精):

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 
 5 #define N 5000
 6 
 7 using namespace std;
 8 
 9 char as[N];
10 int a[N],c[N];
11 int al,bl,b,x;
12 
13 int main()
14   {
15       cin>>as;
16       cin>>b;
17       al=strlen(as);
18       for(int i=0;i<al;i++)
19         a[i+1]=as[i]-'0';
20       for(int i=1;i<=al;i++)
21         {
22             c[i]=(x*10+a[i])/b;
23             x=(x*10+a[i])%b;
24         }
25       bl=1;
26       while(c[bl]==0&&bl<al)
27         bl++;
28       for(int i=bl;i<=al;i++)
29         printf("%d",c[i]);
30       return 0;
31   }

 实数加法:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 char as[101],bs[101],cs[101];
 6 int a1[101],a2[101],b1[101],b2[101],c1[101],c2[101],t[101];
 7 int l11,l12,l21,l22,l,l1,l2,s;
 8 int main()
 9   {
10       cin>>as>>bs;
11       l1=strlen(as);
12       l2=strlen(bs);
13       for(int i=l1-1;i>=0;i--)
14         as[i+1]=as[i];
15       for(int i=l2-1;i>=0;i--)
16         bs[i+1]=bs[i];
17       int p=1;
18       while(as[p]!='.')
19         a1[p]=as[p]-'0',p++;
20       l11=p-1;
21       while(p<=l1)
22         {
23             a2[p-l11-1]=as[p]-'0';
24             p++;
25         }
26       l12=l1-l11-1;
27       p=1;
28       while(bs[p]!='.')
29         b1[p]=bs[p]-'0',p++;
30       l21=p-1;
31       while(p<=l2)
32         {
33             b2[p-l21-1]=bs[p]-'0';
34             p++;
35         }
36       l22=l2-l21-1;
37       for(int i=1;i<=l11;i++)
38         t[l11-i+1]=a1[i];
39       for(int i=1;i<=l11;i++)
40         a1[i]=t[i];
41       for(int i=1;i<=l21;i++)
42         t[l21-i+1]=b1[i];
43       for(int i=1;i<=l21;i++)
44         b1[i]=t[i];
45       l=max(l11,l21);
46       for(int i=1;i<=l;i++)
47         c1[i]=a1[i]+b1[i];
48       for(int i=1;i<=l;i++)
49         if(c1[i]>9)
50           {
51               c1[i]%=10;
52               c1[i+1]++;
53           }
54     if(c1[l+1]!=0) l++;
55     s=max(l12,l22);
56     for(int i=1;i<=s;i++)
57       c2[i]=a2[i]+b2[i];
58     for(int i=s;i>=1;i--)
59       if(c2[i]>9)
60         {
61             c2[i]%=10;
62             c2[i-1]++;
63         }
64     if(c2[0]!=0)
65       c1[1]++;
66     for(int i=l;i>=1;i--)
67       printf("%d",c1[i]);
68     printf(".");
69     for(int i=1;i<=s;i++)
70       printf("%d",c2[i]);
71       return 0;
72   }

 

posted @ 2016-06-04 16:07  月沫  阅读(166)  评论(0编辑  收藏  举报