【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]);
    }
}

 

posted @ 2018-10-21 17:22  Newuser233  阅读(7)  评论(0)    收藏  举报