AcWing 793. 高精度乘法

算法思路

本题中要我们求高精 \(\times\) 低精,与之前的法相同,主要使用“列竖式”思想。

流程

这里假设乘数分别是 \(A, B\),其中 \(A\) 为高精,\(B\) 为低精。

  1. 从最低位开始,让 \(A\) 的每一位数字乘上 \(B\)
  2. 把乘积的进位加到下一位上,并将这一位 \(\bmod 10\)(去掉进位);
  3. 重复以上操作。

代码

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

vector<int> mul(vector<int> &a, int b)
{
    int t = 0;
    vector<int> c;
    for (int i = 0; i < a.size(); i ++ )
    {
        t += a[i] * b; //这里要用+=,加上之前的进位
        //处理进位
        c.push_back(t % 10);
        t /= 10;
    }
    //处理剩余位数
    while (t)
    {
        c.push_back(t % 10);
        t /= 10;
    }
    //处理前导0
    while (c.size() > 1 && c.back() == 0) c.pop_back();
    return c;
}

int main()
{
    string x;
    int b;
    cin >> x >> b;
    vector<int> a;
    for (int i = x.length() - 1; i >= 0; i -- ) a.push_back(x[i] - '0');
    vector<int> c = mul(a, b);
    for (int i = c.size() - 1; i >= 0; i -- ) printf("%d", c[i]);
    return 0;
}

\(\text {Python}\) 稳定发挥!

print(input() * input())
posted @ 2022-07-29 10:44  FXT1110011010OI  阅读(23)  评论(0编辑  收藏  举报