高精模板

来源:互联网 发布:逆袭网络剧未删减dvd 编辑:程序博客网 时间:2024/06/07 10:11
#include<cstdio>#include<cstring>#include<iostream>#define K 10000using namespace std;char a[1100000];struct st{    long long s[5100],tot;    void init(){        memset(s,0,sizeof s);        tot=1;    }    void chu(int d){        for(int i=tot;i>=1;i--)        s[i-1]+=1ll*s[i]%d*K,s[i]=s[i]/d;        while(s[tot]==0) tot--;    }    void print(){        printf("%lld",s[tot]);        for(int i=tot-1;i>=1;i--) printf("%04lld",s[i]);        printf("\n");    }}c;int d;int k=1,n,m;int main(){    cin>>a+1>>d;    n=strlen(a+1);    c.init();    for(int i=n;i>=1;i--) {        if(k==K) k=1,c.tot++;        c.s[c.tot]+=k*(a[i]-'0');        k*=10;    }    c.chu(d);    c.print();}
#include<cstdio>#include<cstring>#include<iostream>#define K 10000using namespace std;char a[1100000],b[1100000];struct st{    int s[11000],tot;    void init(){        memset(s,0,sizeof s);        tot=1;    }    st operator -(const st&b)const{        st ans;ans.init();ans.tot=max(tot,b.tot);        for(int i=1;i<=ans.tot;i++)        ans.s[i]=s[i]-b.s[i];        for(int i=1;i<=ans.tot;i++)            if(ans.s[i]<0) ans.s[i]+=K,ans.s[i+1]-=1;        while(ans.s[ans.tot]==0) ans.tot--;        return ans;    }    void print(){        printf("%d",s[tot]);        for(int i=tot-1;i>=1;i--) printf("%04d",s[i]);        printf("\n");    }}c,d;int k=1,n,m;int main(){    cin>>a+1>>b+1;    n=strlen(a+1),m=strlen(b+1);    c.init(),d.init();    for(int i=n;i>=1;i--) {        if(k==K) k=1,c.tot++;        c.s[c.tot]+=k*(a[i]-'0');        k*=10;    }    k=1;    for(int i=m;i>=1;i--) {        if(k==K) k=1,d.tot++;        d.s[d.tot]+=k*(b[i]-'0');        k*=10;    }    st ans;    ans.init();    if(n>m)    ans=c-d;    else if(n<m) printf("-"),ans=d-c;    else if(n==m){        for(int i=1;i<=max(c.tot,d.tot);i++)        if(c.s[i]>d.s[i])             ans=c-d;        else if(c.s[i]<d.s[i])            printf("-"),ans=d-c;    }    ans.print();}
#include<cstdio>#include<cstring>#include<iostream>#define K 10000using namespace std;char a[1100000],b[1100000];struct st{    int s[510],tot;    void init(){        memset(s,0,sizeof s);        tot=1;    }    st operator +(const st&b)const{        st ans;ans.init();ans.tot=max(tot,b.tot);        for(int i=1;i<=ans.tot;i++)        ans.s[i]=s[i]+b.s[i];        for(int i=1;i<=ans.tot;i++)        ans.s[i+1]+=(ans.s[i])/K,ans.s[i]=(ans.s[i])%K;        if(ans.s[ans.tot+1]) ans.tot++;        return ans;    }    void print(){        printf("%d",s[tot]);        for(int i=tot-1;i>=1;i--) printf("%04d",s[i]);        printf("\n");    }}c,d;int k=1,n,m;int main(){    cin>>a+1>>b+1;    n=strlen(a+1),m=strlen(b+1);    c.init(),d.init();    for(int i=n;i>=1;i--) {        if(k==K) k=1,c.tot++;        c.s[c.tot]+=k*(a[i]-'0');        k*=10;    }    k=1;    for(int i=m;i>=1;i--) {        if(k==K) k=1,d.tot++;        d.s[d.tot]+=k*(b[i]-'0');        k*=10;    }    st ans=c+d;    ans.print();}
原创粉丝点击