码迷,mamicode.com
首页 > 其他好文 > 详细

[note]高精度模板

时间:2018-11-08 18:11:07      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:max   符号   swap   wap   一个   tchar   putc   i++   int()   

高精度模板

先定义一个struct

struct gj{
    int l,s[N];
    bool fh;
    void Print(){
        if(fh)putchar('-');
        for(int i=l;i>=1;i--)printf("%d",s[i]);
        puts("");
    }
}blank;

高精+高精

加之前判断一下符号
一负一正转成减法

gj operator +(gj x,gj y){
    gj z=blank;z.l=max(x.l,y.l);
    for(int i=1;i<=z.l;i++){
        z.s[i]+=x.s[i]+y.s[i];
        if(z.s[i]>9)z.s[i+1]++,z.s[i]-=10;
    }
    if(z.s[z.l+1])z.l++;
    return z;
}

高精-高精

gj operator -(gj x,gj y){
    gj z=blank;z.l=max(x.l,y.l);
    for(int i=z.l;i>=1;i--){
        if(x.s[i]==y.s[i])continue;
        if(x.s[i]<y.s[i])swap(x,y),z.fh=1;
        break;
    }
    for(int i=1;i<=z.l;i++){
        z.s[i]+=x.s[i]-y.s[i];
        if(z.s[i]<0)z.s[i]+=10,z.s[i+1]--;
    }
    while(!z.s[z.l]&&z.l>1)z.l--;
    return z;
}

高精*高精

gj operator *(gj x,gj y){
    gj z=blank;z.l=x.l+y.l;
    for(int i=1;i<=x.l;i++){
        int jw=0;
        for(int j=1;j<=y.l;j++){
            z.s[i+j-1]+=x.s[i]*y.s[j]+jw;
            jw=z.s[i+j-1]/10;
            z.s[i+j-1]%=10;
        }
        z.s[i+b.l]=jw;
    }
    while(z.l>1&&!z.s[z.l])z.l--;
    return z;
}

[note]高精度模板

标签:max   符号   swap   wap   一个   tchar   putc   i++   int()   

原文地址:https://www.cnblogs.com/sdzwyq/p/9930047.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!