C++ 高精度乘法及模板

高精度乘法解决了两数相乘得到的数大于long long 范围时的问题,这里提供的是一个大数乘一个小数(int 范围内)的模板,用vector 模拟乘法过程并存值,之后返回vector。先上模板:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <iomanip>
#include <sstream>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
#define lowbit(x) x & (-x)

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;

const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const int N = 1e6 + 50;

vector<int > A;

vector<int > mul(vector<int > &a, int b)
{
    vector<int > res;

    int t = 0;

    for (int i = 0; i < a.size() || t; i ++)
    {
        if (i < a.size()) t += a[i] * b;
        res.push_back(t % 10);
        t /= 10;
    }
    while (!res.back() && res.size() > 1) res.pop_back();
    
	return res;
}

int main()
{
    string a;
    int b;
    cin >> a >> b;
	
    for (int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] ^ 48);
    
	auto c = mul(A, b);
	
    for (int i = c.size() - 1; i >= 0; i --) cout << c[i];
    cout << endl;
    return 0;
}

这里介绍的方法不同于一般的乘法过程,一般的乘法过程12 * 13,一般来说可能要一位一位的去乘然后错位相加,这里是用上面的每一位去乘下面整个的数,(12 x 3 = 26,保留6,2进位,再用(2 + 12 x 1)= 146。用这个方法来模拟乘法的过程。

posted @ 2020-08-19 11:47  Hayasaka  阅读(340)  评论(0编辑  收藏  举报