大数运算之加法和乘法算法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;i<lena; i++)
        for(int j=0; j<lenb; j++)
        {
            res[i+j]+=(int)((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++的确实难写, 并且局限性很高. 位数大了要计算很久.

阅读更多
版权声明:本文为博主原创文章,喜欢就点个赞吧 https://blog.csdn.net/Anxdada/article/details/73604464
个人分类: 大数计算
上一篇poj 1060---青蛙的约会 【扩展GCD】
下一篇HDU --- 4305 Lighting 【生成树计数 + 向量 】
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭