High-precision subtraction template (Luo Gu 2142)

Luo Gu P2142

. 1  // luogu2142, not pressure-bit precision subtractor 
2 #include <cstdio>
 . 3 #include <the iostream>
 . 4 #include < String >
 . 5  
. 6  the using  namespace STD;
 . 7  
. 8  const  int max_n = 11000 ;
 . 9  
10  int A [max_n ], B [max_n], C [max_n];
 . 11  string X, Y;
 12 is  
13 is  // string transfer array (reverse) function 
14  void SWI ( string S, int a [])
 15  {
 16      for (int i=0;i<max_n;i++) a[i]=0;
17     int n=s.size()-1;
18     for (int i=n;i>=0;i--)
19     {
20         a[0]++;
21         a[a[0]]=s[i]-'0';
22     }
23 }
24 
25 //c=a-b(a>b>0)
26 void substract(int a[],int b[],int c[])
27 {
28     for (int i=1;i<=a[0];i++)
29     {
30         if (a[i]<b[i])
31         {
32             a[i+1]--;
33             a[i]+=10;
34         }
35         c[i]=a[i]-b[i];
36     }
37     c[0]=a[0];
38     while (c[c[0]]==0 && c[0]>1) c[0]--;
39 }
40 
41 //输出c
42 void out(int a[])
43 {
44     for (int i=a[0];i>0;i--) printf("%d",a[i]);
45 }
46 int main()
47 {
48     cin>>x>>y;
49     if (x.size()<y.size() || x.size()==y.size() && x<y)
50     {
51         printf("-");
52         string t=x;x=y;y=t;
53     }
54     swi(x,a);swi(y,b);
55     substract(a,b,c);
56     out(c);
57     return 0;
58 }

 

Pressure nn bit:

. 1  // luogu2142, precision pressure nn bit subtractor 
2 #include <cstdio>
 . 3 #include <the iostream>
 . 4  
. 5  the using  namespace STD;
 . 6  
. 7  const  int max_n = 11000 , = nn . 9 , Mo = 1E9; // Mo = nn ^ 10 
. 8  
. 9  int a [max_n], B [max_n], C [max_n];
 10  string X, Y;
 . 11  
12 is  // function strings transfer array (reverse) (pressure nn bit) 
13 is  void SWI ( string S, int A [])
 14  {
 15      for (int i=0;i<=max_n;i++) a[i]=0;
16     int n=s.size()-1,i;
17     for (i=n;i>=nn-1;)
18     {
19         a[0]++;
20         int t=1;
21         for (int j=1;j<=nn;j++)
22         {
23             a[a[0]]+=(s[i]-'0')*t;
24             i--;t*=10;
25         }
26     }
27     if (i>=0)
28     {
29         a[0]++;
30         for (int j=0;j<=i;j++)
31             a[a[0]]=a[a[0]]*10+s[j]-'0';
32     }
33 }
34 36 //c=a-b(a>b>0)
37 void substract(int a[],int b[],int c[])
38 {
39     for (int i=1;i<=a[0];i++)
40     {
41         if (a[i]<b[i])
42         {
43             a[i+1]--;
44             a[i]+=mo;
45         }
46         c[i]=a[i]-b[i];
47     }
48     c[0]=a[0];
49     while (c[c[0]]==0 && c[0]>1) c[0]--;
50 }
51 
52 //输出a
53 void out(int a[])
54 {
55     printf("%d",a[a[0]]);
56     for (int i=a[0]-1;i>0;i--)
57     {
58         int t=a[i],k;
59         for(k=0;t>0;k++) t/=10;
60         for (int i=k+1;i<=nn;i++) printf("0");
61         if (a[i]>0) printf("%d",a[i]);
62     }
63 }
64 
65 int main()
66 {
67     cin>>x>>y;
68     if (x.size()<y.size() || x.size()==y.size() && x<y)
69     {
70         printf("-");
71         string t=x;x=y;y=t;
72     }
73     swi(x,a);swi(y,b);
74     substract(a,b,c);
75     out(c);
76     return 0;
77 }

long long range pressure level (nn≤18)

. 1  // luogu2142, precision subtraction (long long range pressure level) pressure nn bit 
2 #include <cstdio>
 . 3 #include <the iostream>
 . 4  
. 5  the using  namespace STD;
 . 6  
. 7  const  int max_n = 11000 , nn = 12 is ;
 . 8  const  Long  Long Mo = 1e12; // Mo ^ NN = 10 
. 9  
10  Long  Long A [max_n], B [max_n], C [max_n];
 . 11  string X, Y;
 12 is  
13 is  // string transfer array (reverse ) (pressure nn bit) function 
14  void SWI ( String S,long long a[])
15 {
16     for (int i=0;i<=max_n;i++) a[i]=0;
17     int n=s.size()-1,i;
18     for (i=n;i>=nn-1;)
19     {
20         a[0]++;
21         long long t=1;
22         for (int j=1;j<=nn;j++)
23         {
24             a[a[0]]+=(s[i]-'0')*t;
25             i--;t*=10;
26         }
27     }
28     if (i>=0)
29     {
30         a[0]++;
31         for (int j=0;j<=i;j++)
32             a[a[0]]=a[a[0]]*10+s[j]-'0';
33     }
34 }
35 
36 //c=a-b(a>b>0)
37 void substract(long long a[],long long b[],long long c[])
38 {
39     for (int i=1;i<=a[0];i++)
40     {
41         if (a[i]<b[i])
42         {
43             a[i+1]--;
44             a[i]+=mo;
45         }
46         c[i]=a[i]-b[i];
47     }
48     c[0]=a[0];
49     while (c[c[0]]==0 && c[0]>1) c[0]--;
50 }
51 
52 //输出a
53 void out(long long a[])
54 {
55     printf("%lld",a[a[0]]);
56     for (int i=a[0]-1;i>0;i--)
57     {
58         long long t=a[i];
59         int k;
60         for(k=0;t>0;k++) t/=10;
61         for (int i=k+1;i<=nn;i++) printf("0");
62         if (a[i]>0) printf("%lld",a[i]);
63     }
64 }
65 
66 int main()
67 {
68     cin>>x>>y;
69     if (x.size()<y.size() || x.size()==y.size() && x<y)
70     {
71         printf("-");
72         string t=x;x=y;y=t;
73     }
74     swi(x,a);swi(y,b);
75     substract(a,b,c);
76     out(c);
77     return 0;
78 }

 

Guess you like

Origin www.cnblogs.com/Currier/p/11298695.html