四个高精度模板
只有第一个高精度加法是不需要处理前置0的,因为他不可能存在前置0。其他的都需要处理下。然后注意下高精度除法模板。我们还要注意高精度减法是默认a>b,所以不需要像加法一样交换位置。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e7 + 10;
vector<int> add(vector<int>& a, vector<int>& b)
{
if (a.size() < b.size())
return add(b, a);
int t = 0;
vector<int> c;
for (int i = 0;i < a.size();i++)
{
t += a[i];
if (i < b.size())
t += b[i];
c.push_back(t % 10);
t /= 10;
}
if (t > 0)
c.push_back(t);
return c;
}
vector<int> sub(vector<int>& a, vector<int>& b)
{
int t = 0;
vector<int> c;
for (int i = 0;i < a.size();i++)
{
t = a[i] - t;
if (i < b.size())
t -= b[i];
c.push_back((t + 10) % 10);
if (t < 0)
t = 1;
else
t = 0;
}
while (c.size() > 1 && c.back() == 0)//注意不可以取等于号,因为结果有可能是0
c.pop_back();
return c;
}
vector<int> mul(vector<int> a, int b)
{
int t = 0;
vector<int> c;
for (int i = 0;i < a.size() || t;i++)
{
if (i < a.size())
t += a[i] * b;
a.push_back(t % 10);
t /= 10;
}
while (c.size() > 1 && c.back() == 0)
c.pop_back();
return c;
}
vector<int> div(vector<int> a, int b)
{
int t = 0;
vector<int> c;
for (int i = a.size()-1;i>=0;i--)
{
t = t * 10 + a[i];
a.push_back(t / 10);
t %= 10;
}
while (c.size() > 1 && c.back() == 0)
c.pop_back();
return c;
}