zoukankan      html  css  js  c++  java
  • 高精度(高精加,高精减,高精乘,高精除)

    高精加

    #include<iostream>
    #include<vector>
    #include<string>
    using namespace std;
    
    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()
    {
        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];
        system("pause");
        return 0;
    }
    

    高精度减

    #include<iostream>
    #include<vector>
    #include<string>
    using namespace std;
    
    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;
    
        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();
        return C;
    }
    
    int main()
    {
        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))  //如果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);
    
            printf("-");
            for(int i = C.size()-1; i >= 0; i--) cout << C[i];
        }
        
        system("pause");
        return 0;
    }
    

    高精乘

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    vector<int> mul(vector<int> A, int b)
    {
        vector<int> C;
    
        int t = 0;
        for(int i = 0; i < A.size() || t; i++)  //这样最高位可以直接添加
        {
            if(i < A.size()) t += A[i]*b;
            C.push_back(t % 10);
            t /= 10;
        }
        return C;
    }
    
    int main()
    {
        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);
    
        while(C.size() > 1 && C.back() == 0) C.pop_back();
        for(int i = C.size()-1; i >= 0; i--) cout << C[i];
        system("pause");
        return 0;
    }
    

    高精除法

    #include<iostream>
    #include<string>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    vector<int> div(vector<int> A, int b, int &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();
        return C;
    }
    
    int main()
    {
        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');
        
        int r; //用来储存余数
        auto C = div(A, b, r);
    
        for(int i = C.size()-1; i >= 0; i--) cout << C[i];
        cout << endl << r << endl;
        system("pause");
        return 0;
    }
    
  • 相关阅读:
    Scratch编程:打猎(十)
    Scratch编程:漂亮的时钟(九)
    剑指offer总结一:字符、数字重复问题
    剑指offer:数值的整数次方
    剑指offer:二进制中1的个数
    InnoDB存储引擎与MyIsam存储引擎的区别
    数据库查询慢的原因
    剑指offer:矩形覆盖
    剑指offer:跳台阶问题
    redis键的过期和内存淘汰策略
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/13399626.html
Copyright © 2011-2022 走看看