zoukankan      html  css  js  c++  java
  • 高精度

    高精度

    高精度 + 高精度

    https://www.luogu.com.cn/problem/P1601

    题意:求 A + B 。

    #include <bits/stdc++.h>
    using namespace std;
    
    const char nl = '
    ';
    //const int N = ;
    
    // C = A + B
    vector<int> add(vector<int> &A, vector<int> &B){
        vector<int> C;
        int t = 0;
        for (int i = 0; i < A.size() || i < B.size(); ++i){
            if (i < A.size()) t += A[i];
            if (i < B.size()) t += B[i];
            C.push_back(t % 10);
            t /= 10;
        }
        if (t) C.push_back(1);
    
        return C;
    }
    
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        string a, b;
        vector<int> A, B;
    
        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');
    
        auto C = add(A, B);
    
        for (int i = C.size() - 1; i >= 0; --i) cout << C[i];
    
        return 0;
    }
    
    

    高精度 - 高精度

    https://www.luogu.com.cn/problem/P2142

    题意:求 A - B 。(第二个可能比第一个大)

    #include <bits/stdc++.h>
    using namespace std;
    
    const char nl = '
    ';
    //const int N = ;
    
    // 判断是否 A >= B
    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 false;
        return true;
    }
    
    // C = A - B
    vector<int> sub(vector<int> &A, vector<int> &B){
        vector<int> C;
        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(); // 去掉前导0
    
        return C;
    }
    
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        string a, b;
        vector<int> A, B;
    
        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');
    
        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;
    }
    
    

    高精度 * 低精度

    题意:求 C = A * b 。

    #include <bits/stdc++.h>
    using namespace std;
    
    const char nl = '
    ';
    //const int N = ;
    
    // C = A * b
    vector<int> mul(vector<int> &A, int b){
        vector<int> C;
        int t = 0;
        for (int i = 0; i < A.size(); ++i){
            t += A[i] * b;
            C.push_back(t % 10);
            t /= 10;
        }
    
        while (t){
            C.push_back(t % 10);
            t /= 10;
        }
    
        return C;
    }
    
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        string a;
        int b;
    
        cin >> a >> b;
    
        vector<int> A;
        for (int i = a.size() - 1; i >= 0; --i) A.push_back(a[i] - '0');
    
        auto C = mul(A, b);
    
        for (int i = C.size() - 1; i >= 0; --i) cout << C[i];
    
        return 0;
    }
    
    

    高精度 / 低精度

    https://www.luogu.com.cn/problem/P1480

    题意:求 C = A / b 。

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long LL;
    
    const char nl = '
    ';
    //const int N = ;
    
    vector<int> mul(vector<int> &A, int b, LL &r){
        vector<int> C;
        r = 0;
        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(); // 去掉前导0
    
        return C;
    }
    
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        string a;
        int b;
    
        cin >> a >> b;
    
        vector<int> A;
        for (int i = a.size() - 1; i >= 0; --i) A.push_back(a[i] - '0');
    
        LL r;
        auto C = mul(A, b, r);
    
        for (int i = C.size() - 1; i >= 0; --i) cout << C[i];
    
        return 0;
    }
    
    
  • 相关阅读:
    mysql 添加自增长ID(序列方式)
    获取本地IP地址信息
    Intellij 快捷键
    java转换汉字为首字母搜索,
    gitee在linux下自动备份
    七牛云续费dns的ssl证书
    shiro 的realm的授权
    realme的shiro简单实现方法
    shiro初探,最简单的认证,通过ini文件。
    git config file
  • 原文地址:https://www.cnblogs.com/xiaoran991/p/14403984.html
Copyright © 2011-2022 走看看