1 solutions

  • 0
    @ 2024-10-26 15:25:13

    由于数据比较大n < 1e12,因此我们要用高精度

    #include <bits/stdc++.h>
    using namespace std;
    
    vector<int> mul(vector<int> a, long long b) {
        vector<int> c;
        long long r = 0;
        for(int i = 0; i < a.size() || r; i ++ )
        {
            if(i < a.size()) r += (long long)a[i] * b;
            c.push_back(r % 10);
            r /= 10;
        }
        while(c.size() > 1 && c.back() == 0) c.pop_back();
        return c;
    }
    
    vector<int> div(vector<int> a, int b, int r) {
        vector<int> c;
        for(int i = a.size() - 1; i >= 0; i -- ) {
            r = r * 10 + a[i];
            c.push_back(r / b);
            r %= b;
        }
        reverse(c.begin(), c.end());
        while(c.size() > 1 && c.back() == 0) c.pop_back();
        return c;
    }
    
    int main() {
        string A;
        long long b = 0;
        cin >> A;
        vector<int> a;
        for(int i = A.size() - 1; i >= 0; i -- ) a.push_back(A[i] - '0');
        for(int i = 0; i < A.size(); i ++ ) b = b * 10 + (A[i] - '0');
        auto c = div(mul(a, (b + 1)), 2, 0);
        for(int i = c.size() - 1; i >= 0; i -- ) cout << c[i];
        return 0;
    }
    
    
    • 1

    Information

    ID
    497
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    (None)
    # Submissions
    148
    Accepted
    3
    Uploaded By