// 高精度加法
vector<int> add(vector<int> &A,vector<int> &B) {
vector<int> ans;
if(A.size() < B.size()) return add(B,A);
for(int i = 0,t = 0; i < A.size(); i ++) {
t += A[i];
if(i < B.size()) t += B[i];
ans.push_back(t % 10);
t /= 10;
}
if(t) ans.push_back(t);
return ans;
}
// 高精度减法
vector<int> add(vector<int> &A,vector<int> &B) {
vector<int> ans;
for(int i = 0,t = 0; i < A.size(); i ++) {
t = A[i] - t;
if(i < B.size()) t -= B[i];
ans.push_back((t + 10) % 10);
if(t < 0) t = 1;
else t = 0;
}
// 清除前导0
while(ans.size() > 1 && ans.back() == 0) C.pop_back();
return ans;
}
// 高精度乘法
vector<int> mul(vector<int> &A,vector<int> &B) {
vector<int> ans;
for(int i = 0; i < A.size(); i ++) {
for(int j = 0; j < B.size(); j ++) {
ans[i + j] += A[i] * B[i];
}
}
for(int i = 1; i < A.size() + B.size(); i ++) {
ans[i] += ans[i - 1] / 10;
ans[i - 1] %= 10;
}
while(ans.size() > 1 && ans.back() == 0) ans.pop_back();
return ans;
}
// 高精度除低精度
vector<int> div(vector<int> &A,ll &b) {
vector<int> ans;
ll r = 0;
for(int i = A.size() - 1; i >= 0; i --) {
r = r * 10 + A[i];
ans.push_back(r / b);
r %= b;
}
reverse(ans.begin(),ans.end());
while(ans.size() > 1 && ans.back() == 0) ans.pop_back();
return ans;
}
标签:10,高精度,int,back,vector,计算,ans,模板,size
From: https://www.cnblogs.com/zc-study-xcu/p/18077412