必要的高精度运算。

高精加

int i=1,x=0; memset(c,0,sizeof(c));
while(i<=la || i<=lb) //只要i小于a或b的长度就的循环
{
c[i]+=a[i]+b[i]; //第i位加,注意含进位,给c数组
c[i+1]+=c[i]/10; //取该位置的进位
c[i]%=10; //留下没有进位的部分
i++;
}
if(c[i]>0) lc=i;
else lc=i-1; //lc记录结果的长度

高精减

int i=1; memset(c,0,sizeof(c));
while(i<=la){
if(a[i]<b[i]) a[i]+=10,a[i+1]--;
c[i]=a[i]-b[i];
i++;
}
lc=i;
while(lc>1 && c[lc]==0) lc--;

高精乘

memset(c,0,sizeof(c));
for(int i=1; i<=lb; i++){
x=0;
for(int k=1; k<=la; k++){
c[i+k-1]+=b[i]*a[k]+x;
x=c[i+k-1]/10;
c[i+k-1]%=10;
}
c[i+la]=x;
}
lc=la+lb;
while(c[lc]==0 && lc>1) lc--;

单精乘高精

「n!」

cin>>n;
c[1]=l=1,x=0;
for(int i=1; i<=n; i++){
x=0;
for(int k=1; k<=l; k++){
c[k]=c[k]*i+x;x=c[j]/10;
x=c[j]/10;
c[j]%=10;
}
while(x>0){
l++;
c[l]=x%10;
x/=10;
}
}
for(int i:=l;i>=1;i--) cout<<c[i];

高精除单精

for(int i=1; i<=la; i++){
c[i]=(x*10+a[i])/b;
x=(x*10+a[i])%b;
}
int p=1;
while(c[p]==0 && p<la) p++;
for(int i=p; i<=la; i++) cout<<c[i];
//最后的x为余数