首页 > 其他 > 详细

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

时间:2019-12-24 22:48:12      阅读:124      评论:0      收藏:0      [点我收藏+]

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

解题思路

第1步

技术分享图片

第2步

技术分享图片

第3步

技术分享图片

第4步

技术分享图片

样例输入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

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

原文:https://www.cnblogs.com/codeapes666/p/12093749.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!