高精度
乘法
1 #include2 using namespace std; 3 vector<int> mul(vector<int> &A, vector<int> &B) 4 { 5 vector<int> C(A.size() + B.size()); 6 7 for (int i = 0; i < A.size(); i++) 8 for (int j = 0; j < B.size(); j++) 9 C[i + j] += A[i] * B[j]; 10 11 for (int i = 0, t = 0; i < C.size() || t; i++) 12 { 13 t += C[i]; 14 if (i >= C.size()) C.push_back(t % 10); 15 else C[i] = t % 10; 16 17 t /= 10; 18 } 19 while (C.size() > 1 && C.back() == 0) C.pop_back(); 20 return C; 21 } 22 int main() 23 { 24 string a, b; 25 cin >> a >> b; 26 vector<int> A, B; 27 for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0'); 28 for (int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0'); 29 vector<int> C = mul(A, B); 30 for (int i = C.size() - 1; i >= 0; i--) cout << C[i]; 31 return 0; 32 }
加法
1 #include2 using namespace std; 3 vector<int> add(vector<int> &a, vector<int> &b) { 4 vector<int> c; 5 int t = 0; 6 for(int i = 0; i < a.size() || i < b.size(); i++) { 7 if(i < a.size()) t += a[i]; 8 if(i < b.size()) t += b[i]; 9 c.push_back(t % 10); 10 t /= 10; 11 } 12 if(t) c.push_back(1); 13 return c; 14 } 15 int main() { 16 vector<int> A, B; 17 string a, b; 18 cin >> a >> b; 19 for(int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0'); 20 for(int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0'); 21 auto ok = add(A, B); 22 for(int i = ok.size()-1;i>=0;i--){ 23 cout<<ok[i]; 24 } 25 return 0; 26 }
减法
// C = A - B, 满足A >= B, A >= 0, B >= 0 #include#define int long long #define go continue #define _rep(i,a,b) for( int i=(a); i<(b); ++i) #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); using namespace std; const int mx = 1e4 + 9; int aa[mx], n, m, ans; bool cmp(vector<int> &a, vector<int> &b) { if(a.size() != b.size()) return a.size() > b.size(); for(int i = a.size() - 1; i >= 0; i--) { if(a[i] != b[i]) return a[i] > b[i]; } return true; } vector<int> sub(vector<int> &A, vector<int> &B) { vector<int> C; for (int i = 0, t = 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(); return C; } signed main() { string a, b; cin >> a >> b; vector<int> 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'); if(cmp(A, B)) { auto c = sub(A, B); for(int i = c.size() - 1; i >= 0; i--) { cout << c[i]; } } else { auto c = sub(B, A); cout << "-"; for(int i = c.size() - 1; i >= 0; i--) { cout << c[i]; } } return 0; }
除法
1 // A / b = C ... r, A >= 0, b > 0 2 #include3 #define int long long 4 #define go continue 5 #define _rep(i,a,b) for( int i=(a); i<(b); ++i) 6 #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 7 using namespace std; 8 const int mx = 1e4 + 9; 9 vector<int> div(vector<int> &A, int b, int &r) 10 { 11 vector<int> C; 12 r = 0; 13 for (int i = A.size() - 1; i >= 0; i -- ) 14 { 15 r = r * 10 + A[i]; 16 C.push_back(r / b); 17 r %= b; 18 } 19 reverse(C.begin(), C.end()); 20 while (C.size() > 1 && C.back() == 0) C.pop_back(); 21 return C; 22 } 23 signed main() 24 { 25 string a; 26 int b; 27 int r = 0; 28 cin >> a >> b; 29 vector<int> A; 30 for(int i = a.size() - 1; i >= 0; i--) 31 { 32 A.push_back(a[i] - '0'); 33 } 34 auto c = div(A, b, r); 35 for(int i = c.size() - 1; i >= 0; i--) 36 { 37 cout << c[i]; 38 } 39 puts(""); 40 cout << r; 41 return 0; 42 }