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。用这个方法来模拟乘法的过程。