c++高精模板

j结构体高精加乘除(除法为对int型的)

函数放在外面了

const int base=10000struct bigint
{
    int d[base];
    void clear()
    {
        memset(d,0,sizeof(d));
    }
};
inline bigint operator +(const bigint &a,const bigint &b)
{
    bigint c;
    c.clear();
    c.d[0]=max(a.d[0],b.d[0]);
    for(int i=1;i<=c.d[0];i++)
    {
        c.d[i]+=a.d[i]+b.d[i];
        c.d[i+1]=c.d[i]/base,c.d[i]%=base;
    }
    if(c.d[c.d[0]+1]) c.d[0]++;
    return c;    
}
inline bigint operator *(const bigint &a,const bigint &b)
{
    bigint c;
    c.clear();
    c.d[0]=a.d[0]+b.d[0]-1;
    for(int i=1;i<=a.d[0];i++)
        for(int j=1;j<=b.d[0];j++)
        {
            c.d[i+j-1]+=a.d[i]*b.d[j];
            c.d[i+j]+=c.d[i+j-1]/base;
            c.d[i+j-1]%=base;
        }
    if(c.d[c.d[0]+1]) c.d[0]++;
    return c;
}
inline bigint operator / (const bigint &a,const int b)
{
    bigint c;
    c.clear();
    int ns=0;
    for(int i=a.d[0];i>=1;i--)
    {
        ns=ns*base+a.d[i];
        c.d[i]=ns/b;
        ns%=b;
        if(!c.d[0] && c.d[i]) c.d[0]=i;
    }
    return c;
}

猜你喜欢

转载自www.cnblogs.com/hsez-cyx/p/12309519.html