模拟与高精度 P1303 A*B Problem

题目

https://www.luogu.com.cn/problem/P1303

代码

#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;
#define max 2010
vector<int>p;
void mul(string a, string b)
{

    int t = 0;
    for (int i = 0; i < a.length(); i++)
    {
        for (int j = 0; j < b.length(); j++)
        {
            p[i+j]+=((a[i] - '0')* (b[j] - '0'));//注意是加! 注意这里的p[i+j]!  先乘起来,后面再统一进位
        }
    }
    for (int i = 0; i <max*2; i++)//max * 2是保证遍历完进位前p【】有数字的地方
    {
        if (p[i] >=10)
        {
            p[i + 1] += p[i] / 10;//可能最高位还要进位,所以p预先resize的大小为max*2+2,保证进位有空间记录
            p[i] = p[i] % 10;
        }
    }
}
int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    string a, b;
    cin >>a >> b;
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    p.resize(max*2+2);
    mul(a, b);
    bool ok = false;
    for (int i = p.size() - 1; i >= 0; i--)
    {
        if (p[i] != 0)ok = true;
        if (ok)cout << p[i];
    }
    if (!ok)cout << 0;
}

 

 

 
posted @ 2020-05-06 10:34  Jason66661010  阅读(99)  评论(0编辑  收藏  举报