高精度加法板子
#include <bits/stdc++.h>
using namespace std;
vector<int> A, B, C;
string a, b;
signed main(){
cin >> a >> b;
for(int i = a.size() - 1; i >= 0; --i) A.push_back(a[i]-'0');
for(int i = b.size() - 1; i >= 0; --i) B.push_back(b[i]-'0');
int t = 0;
for(int i = 0; i < A.size() || i < B.size() || t; ++i){
if(i < A.size()) t += A[i];
if(i < B.size()) t += B[i];
C.push_back(t%10);
t /= 10;
}
for(int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);
return 0;
}
高精度减法板子
#include <bits/stdc++.h>
using namespace std;
int n;
string a, b;
vector<int> A, B, C;
bool cmp(string a, string b){
if(a.size() != b.size()) return a.size() > b.size();
for(int i = 0; i < a.size(); ++i){
if(a[i] != b[i]) return a[i] > b[i];
}
return true;
}
signed main(){
cin >> a >> b;
if(!cmp(a, b)){
printf("-");
string c = a;
a = b; b = c;
}
for(int i = a.size() - 1; i >= 0; --i) A.push_back(a[i]-'0');
for(int i = b.size() - 1; i >= 0; --i) B.push_back(b[i]-'0');
int t = 0;
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) C.pop_back();
for(int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);
return 0;
}
高精度乘法板子
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
string a, b;
vector<int> A, B;
long long C[2*N];
signed main(){
cin >> a >> b;
for(int i = a.size() - 1; i >= 0; --i) A.push_back(a[i]-'0');
for(int i = b.size() - 1; i >= 0; --i) B.push_back(b[i]-'0');
for(int i = 0; i < A.size(); ++i){
for(int j = 0; j < B.size(); ++j){
C[i+j] += A[i] * B[j];
}
}
int n = a.size() + b.size();
for(int i = 0; i <= n; ++i){
long long t = C[i];
C[i] = t % 10;
C[i+1] += t / 10;
}
int k = n;
while(k > 0 && C[k] == 0) --k;
for(int i = k; i >= 0; --i){
printf("%lld", C[i]);
}
return 0;
}
高精度除法板子
#include <bits/stdc++.h>
using namespace std;
vector<int> A;
signed main(){
ios::sync_with_stdio(false); cin.tie(0), cout.tie(0);
string a; cin >> a;
int b; cin >> b;
int cur = 0;
for(int i = 0; i < a.size(); ++i){
cur = cur * 10 + (a[i]-'0');
A.push_back(cur / b);
cur %= b;
}
int k = 0;
while(k < A.size() - 1 && A[k] == 0) ++k;
for(; k < A.size(); ++k) cout << A[k];
cout << endl << cur << endl;
return 0;
}