高精度

乘法

 1 #include <bits/stdc++.h>
 2 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 #include <bits/stdc++.h>
 2 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 <bits/stdc++.h>
#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 #include <bits/stdc++.h>
 3 #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 }

 

posted @ 2022-03-03 15:03  std&ice  阅读(47)  评论(0编辑  收藏  举报