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]);
    }

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

  • 相关阅读:
    002-html表格
    001-html常见的标记
    获取本地内外网ip地址
    Windows10设置默认简体美式键盘输入法
    C# 历史版本特性变更
    SQL Server Report Builder RDLC按记录数分页
    自动补全(备份)
    t:datagrid 行编辑 类型备份
    自动生成编号
    文本框上绑校验
  • 原文地址:https://www.cnblogs.com/JimmyC/p/6224178.html
Copyright © 2011-2022 走看看