天天看点

高精度加法与高精度乘法

高精度加法与高精度乘法是高精度计算中最常用的两种运算。

高精度计算是对于大数(几十位到几百位的数)进行运算,思路就是模拟竖式计算,以下给出高精加与高精乘的介绍及模板。

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];

}   

继续阅读