zoukankan      html  css  js  c++  java
  • 模板——高精系列

    存放一下高精的模板

    高精加:

    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int a[1001],b[1001],c[1001],lena,lenb;
    char a1[1001],b1[1001];
    int main(){
        gets(a1);
        gets(b1);
        lena=strlen(a1);
        lenb=strlen(b1);
        for(int i=0;i<=lena-1;i++)    a[lena-i]=a1[i]-48;
        for(int i=0;i<=lenb-1;i++)    b[lenb-i]=b1[i]-48;
        int k=1,x=0;
        while(k<=lena||k<=lenb){
            c[k]=a[k]+b[k]+x;
            x=c[k]/10;
            c[k]%=10;
            k++;
        }
        c[k]=x;
        if(c[k]==0) k--;
        for(int i=k;i>=1;i--)    printf("%d",c[i]);
        return 0;
    } 

    高精减:

    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int a[1001],b[1001],c[1001],lena,lenb;
    char a1[1001],b1[1001],n[1001];
    int main(){
        gets(a1);
        gets(b1);
        if(strlen(a1)<strlen(b1)||strlen(a1)==strlen(b1)&&strcmp(a1,b1)<0){
            strcpy(n,a1);
            strcpy(a1,b1);
            strcpy(b1,n);
            printf("-");
            }
        lena=strlen(a1);
        lenb=strlen(b1);
        for(int i=0;i<=lena-1;i++)    a[lena-i]=a1[i]-48;
        for(int i=0;i<=lenb-1;i++)    b[lenb-i]=b1[i]-48;
        int k=1;
        while(k<=lena||k<=lenb){
            if(a[k]<b[k]) a[k]+=10,a[k+1]--;
            c[k]=a[k]-b[k];
            k++;
        }
        while(c[k]==0&&k>1) k--; 
        for(int i=k;i>=1;i--)    printf("%d",c[i]);
        return 0;
    } 

    高精乘(低精乘高精):

    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int a[1001],b[1001],c[1001],lena,lenb;
    char a1[1001],b1[1001];
    int main(){
        gets(a1);
        gets(b1);
        lena=strlen(a1);
        lenb=strlen(b1);
        for(int i=0;i<=lena-1;i++)    a[lena-i]=a1[i]-48;
        for(int i=0;i<=lenb-1;i++)    b[lenb-i]=b1[i]-48;
        for(int i=1;i<=lena;i++){
            int 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;
        }
        int k=lena+lenb;
        while(c[k]==0&&k>1) k--;
        for(int i=k;i>=1;i--)    printf("%d",c[i]);
        return 0;
    } 

    高精除:

    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    #include<cstring>
    int a[1001],c[1001],b,x,lena,lenc;
    char a1[1001];
    int main(){
        gets(a1);
        scanf("%d",&b);
        lena=strlen(a1);
        for(int i=0;i<=lena-1;i++)    a[i+1]=a1[i]-48;
        for(int i=1;i<=lena;i++){
            c[i]=(x*10+a[i])/b;
            x=(x*10+a[i])%b;
        }
        while(lenc<lena&&c[lenc]==0)    lenc++;
        for(int i=lenc;i<=lena;i++)    printf("%d",c[i]);
    }

    思路都较为简单,平时多看几遍熟悉代码就好

  • 相关阅读:
    149. Max Points on a Line(js)
    148. Sort List(js)
    147. Insertion Sort List(js)
    146. LRU Cache(js)
    145. Binary Tree Postorder Traversal(js)
    144. Binary Tree Preorder Traversal(js)
    143. Reorder List(js)
    142. Linked List Cycle II(js)
    141. Linked List Cycle(js)
    140. Word Break II(js)
  • 原文地址:https://www.cnblogs.com/JimmyC/p/6224178.html
Copyright © 2011-2022 走看看