高精度:加法、乘法(结构体板子)(未完结)

初始化:

const int MX_len = 4005;//视情况而定 
struct qwq{
    int a[MX_len],len;
    qwq(){len = 0;memset(a,0,sizeof(a));}
    qwq(int x){
        memset(a,0,sizeof(a));
        len = 0;
        while(x){a[++len]=x%10;x/=10;}
    }
    qwq(char x[]){
        memset(a,0,sizeof(a));
        len = strlen(x);
        for(register int i=1;i<=len;++i)a[i] = x[len-i]-'0';    
    }
    qwq(string x){
        memset(a,0,sizeof(a));
        len = x.length();
        for(register int i=1;i<=len;++i)a[i]=x[len-i]-'0'; 
    }
    inline void print(){
        for(register int i=len;i;--i)printf("%d",a[i]);
    }
};

加法:

qwq operator + (qwq& x,qwq& y){
    qwq c;
    c.len = max(x.len,y.len);
    for(register int i=1;i<=c.len;++i){
        c.a[i] += x.a[i] + y.a[i];
        c.a[i+1] += c.a[i] / 10;
        c.a[i] %= 10;
    }
    if(c.a[c.len+1])c.len++;
    return c;
}
inline void operator += (qwq& x,qwq& y){x = x + y;}

乘法:

qwq operator * (qwq& x,qwq& y){
    qwq c;
    c.len = x.len + y.len;
    for(register int i=1;i<=x.len;++i){
        for(register int j=1;j<=y.len;++j){
            c.a[i+j-1] += x.a[i] * y.a[j];
            c.a[i+j] += c.a[i+j-1] / 10;
            c.a[i+j-1] %= 10;
        }
    }
    while(!c.a[c.len] && c.len > 1)c.len--;
    return c;
}
inline void operator *= (qwq& x,qwq& y){x = x * y;}

 

posted @ 2022-05-04 14:57  Xu_brezza  阅读(68)  评论(0编辑  收藏  举报