大数乘法(A * B Problem Plus)问题

大数乘法问题一般可以通过将大数转换为数组来解决。

解题思路

第1步

ZSHTXj.png

第2步

ZSHq7q.png

第3步

ZSHHns.png

第4步

ZSHbBn.png

样例

输入1:

56 744

输出1:

800

输入2:

-10 678

输出2:

-6780

输入3:

1234567890 45678901234

输出3:

56393704713977776260

代码实现

#include<stdio.h>
#include<string.h>
#define MAX 1000


// 大数乘法
void Multiply(char* tempA, char* tempB, int* prod, int lenA, int lenB)
{
    for (int i = 0; i < lenA; i++)
    {
        for (int j = 0; j < lenB; j++)
        {
            prod[i+j] += (tempA[i] - '0')*(tempB[j] - '0');
        }
    }

    for (int i = lenA + lenB - 1 - 1; i > 0; i--)
    {
        // 如果本位大于9,则保留本位数的个位,十位向左进位
        if (prod[i] > 9)
        {
            prod[i-1] += prod[i] / 10;
            prod[i] %= 10;
        }
    }
}

int main()
{
    char strA[MAX] = {0};
    char strB[MAX] = {0};

    while (scanf("%s%s", strA, strB) != EOF)
    {
        char tempA[MAX] = {0};
        char tempB[MAX] = {0};
        int prod[2*MAX] = {0};

        int lenA = 0;
        int lenB = 0;
        int negNumA = 0;
        int negNumB = 0;

        lenA = strlen(strA);        // 计算字符串A的长度
        lenB = strlen(strB);        // 计算字符串A的长度

        // 去掉字符串A和B的负号
        if (strA[0] == '-')
        {
            negNumA++;
            lenA--;
        }
        if (strB[0] == '-')
        {
            negNumB++;
            lenB--;
        }

        // 把去掉负号的字符串存储到temp数组中
        for (int i = 0; i < lenA; i++)
        {
            tempA[i] = strA[i+negNumA];
        }
        for(int j = 0; j < lenB; j++)
        {
            tempB[j] = strB[j+negNumB];
        }

        Multiply(tempA, tempB, prod, lenA, lenB);

        // 如果prod数组的第一个元素是0,则直接输出0,如100*0=000,输出0
        if (prod[0] == 0)
        {
            printf("%d", prod[0]);
        }
        // 打印负号
        if (negNumA + negNumB == 1)
        {
            printf("-");
        }

        // 打印A*B的结果,N位数和M位数相乘的最大位数为N+M
        for (int i = 0; i < lenA + lenB - 1; i++)
        {
            if (prod[0] != 0)
            {
                printf("%d", prod[i]);
            }
        }

        printf("\n");

    }
    return 0;
}

个人主页:

www.codeapes.cn

posted @ 2019-12-24 21:47  Codeapes  阅读(276)  评论(0编辑  收藏  举报