美文网首页
高精度(加法&乘法&减法)

高精度(加法&乘法&减法)

作者: fo0Old | 来源:发表于2017-03-21 00:01 被阅读0次

    高精度加法:

    void jiafa(char *a,int lena,char *b,int lenb,char *res)
    {
        int i=lena-1,j=lenb-1,k=0;
        while((i+1)||(j+1))
        {
            if(i!=-1)res[k]+=(int)(a[i--]-'0');
            if(j!=-1)res[k]+=(int)(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 chengfa(char *a,int lena,char *b,int lenb,char *res)
    {
        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]);
    }
    

    高精度减法:

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

    相关文章

      网友评论

          本文标题:高精度(加法&乘法&减法)

          本文链接:https://www.haomeiwen.com/subject/dukwnttx.html