高精度模板

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
string a1, b1;
int a[510], b[510], c[510];
int lena, lenb, lenc, x;

int main() {
    cin>> a1 >> b1;
    lena=a1.length();
    lenb=b1.length();
    for (int i=0; i<lena; i++) a[lena-i]=a1[i]-'0';
    for (int i=0; i<lenb; i++) b[lenb-i]=b1[i]-'0';//1.输入与存储 
    lenc=1; x=0; //注意初始化 
    while (lenc<=lena || lenc<=lenb) { //2.核代 
        c[lenc]=a[lenc]+b[lenc]+x;
        x=c[lenc]/10;
        c[lenc]%=10;
        lenc++;
    }
    c[lenc]=x;     //3.最高位处理 
    if (c[lenc]==0) lenc--;//4.去前导0 
    for (int i=lenc;i>=1;i--)//5.输出 
        cout<<c[i];
    return 0;
}
高精加
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <cstring>
 5 using namespace std;
 6 string a1, b1;
 7 int a[5001], b[5001], c[5001];
 8 int lena, lenb, lenc, x;
 9 
10 int main() {
11     cin>>a1>>b1;
12     lena=a1.length();
13     lenb=b1.length();
14     for (int i=0; i<lena; i++) a[i]=a1[lena-i-1]-'0';
15     for (int i=0; i<lenb; i++) b[i]=b1[lenb-i-1]-'0';
16     if (lena<lenb || (lena==lenb && a[lena-1]<b[lenb-1])) {
17         cout<<'-';
18         memcpy(c, a, sizeof(a));
19         memcpy(a, b, sizeof(b));
20         memcpy(b, c, sizeof(c));
21         memset(c, 0, sizeof(c));
22     }
23     int i;
24     i=lenb; lenb=lena; lena=i;
25     i=0;
26     while (i<lena || i<lenb) {
27         if (a[i]<b[i]) {
28             a[i+1]--;
29             a[i]+=10;
30         }
31         c[i]=a[i]-b[i];
32         i++;
33     }
34     lenc=i;
35     while (lenc>=0 && c[lenc]==0) lenc--;
36     if (lenc==-1) cout<<0;
37     else for (int i=lenc; i>=0; i--) cout<<c[i];
38     return 0;
39 }
高精减
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
string a1, b1;
int a[5100], b[5100], c[10010];
int lena,lenb,lenc,x;

int main() {
    cin>>a1>>b1;
    lena=a1.length();
    lenb=b1.length();
    for (int i=0;i<lena;i++) a[lena-i]=a1[i]-'0';
    for (int i=0;i<lenb;i++) b[lenb-i]=b1[i]-'0';
    for (int i=1;i<=lena;i++) {
        x=0;
        for (int j=1;j<=lenb;j++) {
            c[i+j-1]+=(a[i]*b[j]+x);
            x=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
        c[i+lenb]=x;
    }
    lenc=lena+lenb;
    while (c[lenc]==0&&lenc>1) lenc--;
    for (int i=lenc;i>=1;i--) cout<<c[i];
    return 0;
}
高精乘
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 using namespace std;
 5 string a;
 6 int c[5001];
 7 int x, b, lena, lenc;
 8 int main() {
 9     cin>>a; cin>>b;
10     lena=a.length();
11     for (int i=0; i<lena; i++) {
12         c[i]=(x*10+a[i]-'0')/b;
13         x=(x*10+a[i]-'0')%b;
14     }
15     lenc=0;
16     while (lenc<lena && c[lenc]==0) lenc++;
17     if (lenc==lena) cout<<0;
18     else  for (int i=lenc; i<lena; i++) 
19             cout<<c[i];
20     return 0;
21 }
高精除低精
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <cstring>
 5 using namespace std;
 6 string a1, b1;
 7 int a[5001], b[5001], c[5001], tmp[5001];
 8 
 9 void print(int a[]) {
10     if (a[0]==0) cout<<0;
11     else for (int i=a[0]; i>0; i--) cout<<a[i];
12     cout<<endl;
13     return;
14 }
15 
16 int comparen(int a[], int b[]) {
17     if (a[0]>b[0]) return 1;
18     if (a[0]<b[0]) return -1;
19     for (int i=a[0]; i>0; i--) {
20         if (a[i]>b[i]) return 1;
21         if (a[i]<b[i]) return -1;
22     }
23     return 0;
24 }
25 
26 void jian(int a[], int b[]) {
27     int f=comparen(a, b);
28     if (f==0) { a[0]=0; return;}
29     if (f==1) {
30         for (int i=1; i<=a[0]; i++) {
31             if (a[i]<b[i]) { a[i+1]--; a[i]+=10;}
32             a[i]-=b[i];
33         }
34         while( a[0]>0 && a[a[0]]==0) a[0]--;
35         return;
36     }
37 }
38 
39 void numcpy(int p[], int q[], int det) {
40     for (int i=1; i<=p[0]; i++) q[i+det-1]=p[i];
41     q[0]=p[0]+det-1;
42 }
43 
44 void chugao() {
45     c[0]=a[0]-b[0]+1;
46     for (int i=c[0]; i>0; i--) {
47         memset(tmp, 0, sizeof(tmp));
48         numcpy(b, tmp, i);
49         while(comparen(a, tmp)>=0) {
50             c[i]++; jian(a, tmp);
51         }
52     }
53     while(c[0]>0 && c[c[0]]==0) c[0]--;
54     return;
55 }
56 
57 
58 int main() {
59     cin>>a1>>b1;
60     a[0]=a1.length(); b[0]=b1.length();
61     for (int i=1; i<=a[0]; i++) a[i]=a1[a[0]-i]-'0';
62     for (int i=1; i<=b[0]; i++) b[i]=b1[b[0]-i]-'0';
63     chugao();
64     print(c); print(a);
65     return 0;
66 }
高精除高精
原文地址:https://www.cnblogs.com/zjzj/p/7285254.html