高精模板

来源:互联网 发布:音乐喷泉动画制作软件 编辑:程序博客网 时间:2024/06/10 16:36

十进制

char tmp[M];struct bnt{    char num[M];    int len;    bnt operator+(const bnt & t)const{        bnt c;c.len=max(len,t.len);        for(int i=0;i<c.len;i++){            c.num[i]+=t.num[i]+num[i];            if(c.num[i]>=10)c.num[i]-=10,c.num[i+1]+=1;        }if(c.num[c.len])c.len++;        return c;    }    bnt operator*(const bnt & t)const{        bnt c;        c.len=len+t.len-1;//a位数乘以b位数至少是a+b-1位数        for(int i=0;i<len;i++)        for(int j=0;j<t.len;j++){            c.num[i+j]+=t.num[j]*num[i];            if(c.num[i+j]>=10)            c.num[i+j+1]+=c.num[i+j]/10,c.num[i+j]%=10;        }if(c.num[c.len])c.len++;        while(!c.num[c.len-1]&&c.len>1)c.len--;        //防止输出0000的情况        return c;    }void rd(){        scanf("%s",tmp);        int l=strlen(tmp);        for(int i=l-1;i>=0;i--)num[len++]=tmp[i]^48;    }void pt(){        for(int i=len-1;i>=0;i--)printf("%d",num[i]);        puts("");    }};

万进制

char str[1000];struct bnt{    int num[1000],len;    bnt(){memset(num,0,sizeof(num));}    void rd(){        scanf("%s",str);        int l=strlen(str),p=0;        for(int i=l-1;i>=0;i-=4){            for(int j=max(0,i-3);j<=i;j++)            p=p*10+(str[j]^48);            num[len++]=p,p=0;               }    }    void pt(){        printf("%d",num[len-1]);        for(int i=len-2;i>=0;i--)            printf("%04d",num[i]);        puts("");    }    bnt operator+(const bnt & tmp)const{        bnt C;        C.len=max(len,tmp.len);        for(int i=0;i<C.len;i++){            C.num[i]+=num[i]+tmp.num[i];            if(C.num[i]>=10000)            C.num[i]-=10000,C.num[i+1]++;        }if(C.num[C.len]>0)C.len++;         return C;    }    bnt operator*(const bnt &tmp)const{        bnt C;        for(int i=0;i<len;i++)        for(int j=0;j<tmp.len;j++){            C.num[i+j]+=num[i]*tmp.num[j];            if(C.num[i+j]>=10000)            C.num[i+j+1]+=C.num[i+j]/10000,C.num[i+j]%=10000;        }C.len=len+tmp.len-1;        if(C.num[C.len]>0)C.len++;        while(C.len>1&C.num[C.len-1]==0)C.len--;        return C;    }};
4 2
原创粉丝点击