【MOBAN】高精度模板
woc woc woc woc woc,太弱了。就是一个朴朴素素常数极大的模板
高精度乘高精度 法法塔模板 高精度乘加除减低精度(压位)
点击查看代码
typedef long long ll;
struct gg{
int len;
ll a[1005];
gg(int x) {
len = 1; memset(a,0,sizeof a); a[1] = x;
}
}now(1),ans(0),tmp(0);
bool operator<(gg a,gg b) {
if(a.len!=b.len) return a.len < b.len;
for(int i=a.len;i;i--) {
if(a.a[i]!=b.a[i]) return a.a[i] < b.a[i];
}
return true;
}
void add(gg &x,int y) {
int le = x.len;
x.a[1]+=y;
for(int i=1;i<=le;i++) {
int oo = x.a[i]/(ll(1e6));
if(!oo) break;
x.a[i+1]+=(x.a[i]/((ll)1e6));
x.a[i]%=((ll)1e6);
}
while(x.a[x.len+1]) x.len++;
}
void sub(gg &x,int y) {
int le = x.len;
x.a[1]-=y;
for(int i=1;i<=x.len;i--) {
if(x.a[i]>=0) break;
int oo = ceil((double)(-x.a[1])/(1e6));
x.a[i] += oo*((ll)1e6);
x.a[i+1] -= oo;
}
while(!x.a[x.len]) x.len--;
}
void mul(gg &x,int y) {
int le = x.len;
for(int i=1;i<=le;i++) x.a[i]*=y;
for(int i=1;i<=le;i++) {
x.a[i+1]+=(x.a[i]/((ll)1e6));
x.a[i]%=((ll)1e6);
}
while(x.a[x.len+1]) x.len++;
}
void div(node &x,ll o) {
for(int i=x.len;i>=1;i--) {
x.a[i-1] += x.a[i]%o*(1e6);
x.a[i] = x.a[i] /o;
}
while(!x.a[x.len]) x.len--;
}
void pint(gg &x) {
printf("%lld",x.a[x.len]);
for(int i=x.len-1;i;i--) {
printf("%05lld",x.a[i]);
}
}