【洛谷】P1303 A*B Problem(高精度乘法模板)

高精度乘法模板

P1303 A*B Problem

参考

参考高精度加法模板

代码

/* P1303 A*B Problem
 * 来源:洛谷
 * 作者:RainbowBird
 * 日期:2020年6月8日
 * 算法:高精度乘法
 */

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

int a[20005], b[20005], c[20005];
char stra[20005], strb[20005];

int main() {
    scanf("%s %s", &stra, &strb);
    int lena = strlen(stra);
    int lenb = strlen(strb);

    // 靠右对齐
    for (int i = lena; i > 0; i--)
        a[i] = stra[lena - i] - '0';
    for (int j = lenb; j > 0; j--)
        b[j] = strb[lenb - j] - '0';

    // 核心部分
    for (int i = 1; i <= lena; i++) {
        for (int j = 1; j <= lenb; j++) {
            c[i + j - 1] += a[i] * b[j];
        }
    }

    // 进位
    for (int i = 1; i < lena + lenb; i++) {
        if (c[i] >= 10) {
            c[i + 1] += c[i] / 10;
            c[i] %= 10;
        }
    }

    int flag = 0;
    for (int i = lena + lenb; i > 0; i--) {
        if (!flag && c[i] != 0)
            flag = 1;
        
        if (flag)
            printf("%d", c[i]); // 倒着输出
    }

    if (!flag)
        printf("%d", 0);

    return 0;
}
posted @ 2020-06-08 16:47  RainbowBird  阅读(105)  评论(0编辑  收藏  举报