• 高精度模板


    #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 }
    高精除高精
  • 相关阅读:
    第九周进度条
    梦断代码阅读笔记01
    NABCD分析
    软件工程个人作业05
    HDU 3949 XOR(线性基)
    luogu 2115 破坏(01分数规划)
    luogu 1360 阵容均衡(前缀和+差分+hash)
    luogu 1967 货车运输(最大生成树+LCA)
    luogu 1344 追查坏牛奶(最小割)
    BZOJ 2007 海拔(平面图最小割转对偶图最短路)
  • 原文地址:https://www.cnblogs.com/zjzj/p/7285254.html
Copyright © 2020-2023  润新知