acwing793. 高精度乘法

给定两个非负整数(不含前导 0) A 和 B,请你计算 A×B 的值。

输入格式

共两行,第一行包含整数 A,第二行包含整数 B。

输出格式

共一行,包含 A×B 的值。

数据范围

1≤A的长度≤100000,
0≤B≤10000

输入样例:

2
3

输出样例:

6

方法一:

把题给看错了,以为是0≤B的长度≤10000的高精×高精,还算了一下64MB够用个JB。。硬着头皮写了一下,不过这个版本也AC了,想必高精×低精也..,就懒得写了

#include <bits/stdc++.h>
using namespace std;

char a[100010], b[100010];

int main() {
    scanf("%s%s", &a, &b);
    int la = strlen(a) - 1, lb = strlen(b) - 1;
    for (int i = 0; i <= la; i++) a[i] -= '0';
    for (int i = 0; i <= lb; i++) b[i] -= '0';
    for (int i = 0; i <= la/2; i++) swap(a[i], a[la-i]);
    for (int i = 0; i <= lb/2; i++) swap(b[i], b[lb-i]);

    vector<int> res;
    for (int i = 0; i <= lb; i++) res.push_back(0);

    for (int i = 0; i <= la; i++) {
        for (int j = 0; j <= lb; j++) {
            res[j + i] += a[i] * b[j];
        }
        res.push_back(0);
    }

    int index = res.size() - 1, c = 0, p;
    while (index > 0 && !res[index]) index--;
    for (int i = 0; i <= index; i++) {
        p = res[i] + c;
        c = p / 10; p %= 10;
        res[i] = p;
    }
    if (c != 0) res[++index] = c;

    while (index >= 0) cout << res[index--];
}
原文地址:https://www.cnblogs.com/nosae/p/15821738.html