如果两个大数的数字存储在两个不同的数组中,我如何将它们相乘?

问题描述 投票:-3回答:1

我得到一个提示,可以用标准的乘法(使用二维数组)将它们相乘。但是谁能告诉我是怎么做的?

这是我目前的代码,我想不出如何处理携带。我花了好几个小时,我最近才开始接触编码。

    int main()
{
    int n, m, i, j;
    printf("Enter multiplicand(n) size: ");
    scanf("%d", &n);
    printf("Enter multiplier(m) size: ");
    scanf("%d", &m);
    int a[n], b[m];
    printf("Enter multiplicands: ");
    for(i = 0; i<n; i++)
    {
        scanf("%d", &a[i]);
    }
    printf("Enter multipliers: ");
    for(i = 0; i<m; i++)
    {
        scanf("%d", &b[i]);
    }

    int c[m][n+m];
    int k = 0 , l = m+n-1 , p = 2;
    for(i = 0; i<m; i++)
    {
        for(j = 0; j<m+n; j++)
        {
            c[i][j] = 0;
        }
    }
    for(i = m-1; i>=0; i--)
    {
        for(j = n-1; j>=0; j--)
        {
            if(a[j]*b[i] < 10)
            {
                c[k][l] = a[j]*b[i] + carry;
                l--;
            }
            else
            {
                carry = a[j]*b[i]%10;
                c[k][l] = carry;
            }
        }
        l = m+n-p;
        p++;
        k++;
    }
    for(i = 0; i<m; i++)
    {
        for(j = 0; j<m+n; j++)
        {
            printf("%d ", c[i][j]);
        }
        printf("\n");
    }
}
c arrays multidimensional-array product multiplication
1个回答
1
投票

阅读维基百科上的网页 棕褐色,然后阅读相关的会议论文。你可以在他们身上获得改进乘法技术的博士学位。这个 报告 一个(以及许多其他)你应该感兴趣。

那么。研究一些开源的bignum库的源码。诸如 GMPlib.

更好的是,只需使用该库(或其他一些bignum库,见 本榜)的C程序。

© www.soinside.com 2019 - 2024. All rights reserved.