[模板] 压位高精

输出的时候要补 \(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("");
	}
};
posted on 2021-07-28 21:25  Oxide  阅读(35)  评论(0)    收藏  举报