高精度! 模板代码!

来源:互联网 发布:淘宝网店为什么会关闭 编辑:程序博客网 时间:2024/06/06 06:40

前言

高精高精模拟竖式的高精!
本人在此提供模板
细节不多讲

需要注意的是

一切代码的格式都是a(+ - / *)b=c的形式
t=temp 中间变量

代码

减法

#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=100100;int a[maxn],b[maxn],c[maxn];int sizea,sizeb,sizec;void swapp(){    int sizet=sizeb,t[sizeb+1];    memset(t,0,sizeof(t));    for(int i=1;i<=sizeb;i++) t[i]=b[i];    memset(b,0,sizeof(b));    for(int i=1;i<=sizea;i++) b[i]=a[i];    sizeb=sizea;    memset(a,0,sizeof(a));    for(int i=1;i<=sizet;i++) a[i]=t[i];    sizea=sizet;}void init(){    string sa,sb;    cin>>sa>>sb;    sizea=sa.size();    sizeb=sb.size();    for(int i=0,j=sizea;i<sizea;i++,j--)        a[j]=sa[i]-'0';    for(int i=0,j=sizeb;i<sizeb;i++,j--)        b[j]=sb[i]-'0';}void comp(){    if(sizeb>sizea){        cout<<"-";        swapp();    }    else if(sizeb==sizea){        int temp=sizeb;        while(a[temp]==b[temp]) temp--;        if(a[temp]<b[temp]){            cout<<"-";            swapp();        }    }}void make_(){    //a>b    for(int i=1;i<=sizea;i++){        c[i]=a[i]-b[i];        if(c[i]<0){            c[i]+=10;            int temp=i+1;            while(!a[temp])                a[temp++]=9;            a[temp]--;        }    }    sizec=sizea;    while(!c[sizec]) sizec--;}void fckitout(){    for(int i=sizec;i>0;i--) cout<<c[i];}int main(){    init();    comp();    make_();    fckitout();    return 0;} 

加法

#include<iostream>using namespace std;const int maxn=100001;string s1,s2;int a[maxn],b[maxn],c[maxn];int sizea,sizeb,sizec;bool aa,bb;void init(){    bool ok=false;    sizea=s1.size();    sizeb=s2.size();    for(int i=0,j=sizea;i<sizea;i++,j--){        if(s1[i]=='-'){            aa=true;            continue;        }         if(s1[i]-'0'>0) ok=true;        if(!ok&&s1[i]=='0') continue;        a[j]=s1[i]-'0';    }    if(aa==true) sizea--;    if(ok==false) sizea=1;    ok=false;    for(int i=0,j=sizeb;i<sizeb;i++,j--){        if(s2[i]=='-'){            bb=true;            continue;        }         if(s2[i]-'0'>0) ok=true;        if(!ok&&s2[i]=='0') continue;        b[j]=s2[i]-'0';    }    if(bb==1) sizeb--;    if(ok==false) sizeb=1;}void jia(){    int temp=0;    sizec=max(sizea,sizeb);    for(int i=1;i<=sizec;i++){        c[i]=a[i]+b[i]+temp;        temp=c[i]/10;        c[i]%=10;    }    if(temp!=0){        sizec++;        c[sizec]=temp;    }}int main(){    cin>>s1;    cin>>s2;    init();    jia();     for(int i=sizec;i>=1;i--) cout<<c[i];    cout<<endl;    return 0;} 

乘法

//还没过样例~//明儿个noip 这坑就放这儿了

除法

//怎么想noip也不会考的吧//不用学的吧//嗯不用不用不考不考