大数运算之加法和乘法算法C++模板

大数加法:

void caladd(char *a,char *b,char *res)
{
    int lena=strlen(a);
    int lenb=strlen(b);
    int i=lena-1,j=lenb-1,k=0;
    while( (i+1) || (j+1) )
    {
        if(i!=-1) res[k] += (a[i--]-'0');
        if(j!=-1) res[k] += (b[j--]-'0');
        res[k+1] += res[k]/10;
        res[k++] %= 10;
    }
    while(!res[k]&&k>1)k--;
    if(res[k])k++;
    res[k]=0;
    for(int s=k-1; s>=0; s--)
        res[s]+='0';
    for(int s=0; s<=(k-1)/2; s++)
        swap(res[s],res[k-1-s]);
}

大数乘法:

void calmutiply(char *a, char *b , char *res)
{
    int lena=strlen(a);
    int lenb=strlen(b);
    int k=0;
    for(int i=0;ifor(int j=0; jint)((a[lena-1-i]-'0')*(b[lenb-1-j]-'0'));
            if(res[i+j]>9)
            {
                res[i+j+1]+=res[i+j]/10;
                res[i+j]%=10;
                if(i+j+1>k)k=i+j+1;
            }
            else if(res[i+j]&&i+j>k)k=i+j;
        }
    for(int s=k; s>=0; s--)
        res[s]+='0';
    for(int s=0;s<=k/2;s++)
        swap(res[s],res[k-s]);
}

推荐大数运算用Java(当然Python也行), C++的确实难写, 并且局限性很高. 位数大了要计算很久.

你可能感兴趣的:(大数计算)