下面是一个我看不懂的压位高精,有大佬可以给个注释或者分享一下不错的压位高精博客吗,qwq
代码如下:
const int base = 1e9;
struct Data
{
ll a[5];
Data(void){ a[0] = a[1] = a[2] = a[3] = a[4] = 0;}
Data(ll x){ a[0] = x % base; a[1] = x / base; a[2] = a[3] = a[4] = 0;}
inline Data operator + (const Data oth) const
{
Data res = *this;
for(int i=0; i<5; ++i)
{
res.a[i] += oth.a[i];
if(res.a[i] >= base)
res.a[i] -= base,
++res.a[i+1];
}
return res;
}
inline Data operator * (const int x) const// x < base
{
Data res = *this;
for(int i=0; i<5; ++i) res.a[i] *= x;
for(int i=0; i<5; ++i)
res.a[i+1] += res.a[i] / base,
res.a[i] %= base;
return res;
}
inline Data operator / (const int x) const
{
Data res;
ll lst = 0;
for(int i=4; i>=0; --i)
{
lst = lst * base + a[i];
res.a[i] = lst / x;
lst %= x;
}
return res;
}
inline void print(char c = 0) const
{
bool flag = 0;
for(int i=4; i>=0; --i)
{
if(flag) printf("%09d",(int)a[i]);
else if(a[i]) printf("%d",(int)a[i]), flag = 1;
}
if(!flag) printf("0");
putchar(c);
}
inline int mod(int x) const
{
if(x==2 || x==5) return a[0] % x;
int res = 0;
for(int i=0; i<5; ++i) res = res + a[i] % 3;
return res % 3;
}
};
Data val[MAXN];
本题的全部代码这里