高精度:加法、乘法(结构体板子)(未完结)
初始化:
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;}