[模板] 压位高精
输出的时候要补 \(0\)!
const int bas=9,mod=1e9;
struct int_ {
int a[50000];
int_() {
memset(a,0,sizeof a);
}
int_ operator + (const int_ &t) const {
int_ r; r.a[0]=max(a[0],t.a[0]);
for(int i=1;i<=r.a[0];++i) {
r.a[i]+=a[i]+t.a[i];
r.a[i+1]+=r.a[i]/mod;
r.a[i]%=mod;
}
if(r.a[r.a[0]+1]) ++r.a[0];
return r;
}
int_ operator * (int t) const {
int_ r; r.a[0]=a[0];
int re=0;
for(int i=1;i<=r.a[0];++i) {
r.a[i]=(1ll*a[i]*t+re)%mod;
re=(1ll*a[i]*t+re)/mod;
}
while(re)
r.a[++r.a[0]]=re%mod,
re/=mod;
return r;
}
void Output() {
// 第一部分不需要满 bas 位
write(a[a[0]]);
for(int i=a[0]-1;i>0;--i)
printf("%0*d",bas,a[i]);
puts("");
}
};
浙公网安备 33010602011771号