【模板】高精度

来源:互联网 发布:找淘宝客服工作 编辑:程序博客网 时间:2024/06/03 14:30

  • 高精加
  • 高精减
  • 高精乘

高精加

http://codevs.cn/problem/3116/

//数组模拟#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=5000;char aa[maxn],bb[maxn];int a[maxn],b[maxn],c[maxn];int main(){    cin>>aa;cin>>bb;    int la=strlen(aa);    int lb=strlen(bb);    for(int i=0;i<la;i++) a[la-i-1]=aa[i]-'0';    for(int i=0;i<lb;i++) b[lb-i-1]=bb[i]-'0';    int lc=max(la,lb);    for(int i=0;i<lc;i++)   {        c[i]+=a[i]+b[i];        c[i+1]+=c[i]/10,c[i]%=10;    }    if(c[lc]) lc++;    for(int i=lc-1;i>=0;i--) printf("%d",c[i]);    return 0;}

高精减

http://codevs.cn/problem/3115/

#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=5000;char aa[maxn],bb[maxn];int a[maxn],b[maxn],c[maxn];int main(){    cin>>aa;cin>>bb;    int la=strlen(aa);    int lb=strlen(bb);    if(la<lb||(la==lb&&strcmp(aa,bb)<0)) swap(aa,bb),swap(la,lb),cout<<"-";    for(int i=0;i<la;i++) a[la-i-1]=aa[i]-'0';    for(int i=0;i<lb;i++) b[lb-i-1]=bb[i]-'0';    int lc=max(la,lb);    for(int i=0;i<lc;i++) c[i]=a[i]-b[i];    for(int i=0;i<lc;i++){        if(c[i]<0){            c[i]+=10;            c[i+1]-=1;        }    }    while(!c[lc-1]&&lc>1) lc--;                //a-b=0    for(int i=lc-1;i>=0;i--) printf("%d",c[i]);    return 0;}

高精乘

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;char ai[508];int a[1000],b[1000];long long c[100000];int main(){    cin>>ai;    int la=strlen(ai);    for(int i=0;i<la;i++) a[la-i-1]=ai[i]-'0';    cin>>ai;    int lb=strlen(ai);    for(int i=0;i<lb;i++) b[lb-i-1]=ai[i]-'0';    for(int i=0;i<la;i++){        for(int j=0;j<lb;j++)            c[i+j]+=a[i]*b[j];    }    for(int i=0;i<la+lb;i++){        c[i+1]+=c[i]/10;        c[i]%=10;    }    bool flag=1;    for(int i=la+lb;i>=0;i--){        if(c[i]==0&&flag) continue;        flag=0;        printf("%d",c[i]);    }    return 0;} 
原创粉丝点击