高精度加法与高精度乘法是高精度计算中最常用的两种运算。
高精度计算是对于大数(几十位到几百位的数)进行运算,思路就是模拟竖式计算,以下给出高精加与高精乘的介绍及模板。
1、高精加:
设a、b数组为加数,c数组为和,那么a、b的对应位数字要进行相加,且顺序从低位到高位,在加的过程中,要注意进位。
以下为代码模板:(a[0]表示a长度,b、c亦然;数组从左到右顺序为从低位到高位顺序)
newdata cal(newdata a,newdata b)
{
newdata c;
for (int i=0;i<=200;i++) c[i]=0; //初始化c数组
for (int i=1;i<=max(a[0],b[0]);i++) //因为是对应位,故不用写两重循环
{
c[i]+=a[i]+b[i];
if (c[i]>=10)
{
c[i+1]=c[i]/10;
c[i]%=10;
}
}
if (c[max(a[0],b[0])+1]!=0) c0]=max(a[0],b[0])+1; else c[0]=max(a[0],b[0]);
return c;
}
2、高精乘:
设a、b为乘数,c为积,那么a、b每一位都要与另一乘数每一位相乘(而不是对应位),乘的过程中要注意进位。
代码:(以1000位为例)
void cal(int *a,int *b)
{
int c[2001];
for (int i=1;i<=2000;i++) c[i]=0;
for (int i=1;i<=1000;i++)
for (int j=1;j<=1000;j++)
{
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
for (int i=1;i<=1000;i++) a[i]=c[i];
}