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


    高精度就是利用数组模拟就行计算。为了保证一致性,数组中是低位在前

    高精度加法

    vector<int> add(vector<int>& A, vector<int>& B){
        if(A.size() < B.size()) return add(B, A);//保证A最少比B长
        
        vector<int> C;
        int t = 0;
        for(int i = 0; i < A.size(); ++i){
            t += A[i];
            if(i < B.size()) t += B[i];
            C.push_back(t % 10);
            t /= 10;
        }
        if(t) C.push_back(t);
        
        return C;
    }
    

    高精度减法

    // C = A - B, 满足A >= B, A >= 0, B >= 0
    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;
    }
    

    高精度乘法

    这里模板是一个大数乘于一个较小的数

    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 + t;
            C.push_back(t % 10);
            t /= 10;
        }
        if(t) C.push_back(t);
        
        return C;
    }
    

    高精度除法

    模板是大数除于一个较小的数

    vector<int> div(vector<int>& A, int b, int& t){//t为余数,通过引用传回
        vector<int> C;
        t = 0; 
        for(int i = A.size() - 1; i >= 0; --i){
            t = t * 10 + A[i];
            C.push_back(t / b);
            t %= b;
        }
        
        reverse(C.begin(), C.end());//将C转置,方便去除前导0
        
        while(C.size() > 1 && C.back() == 0) C.pop_back();
        
        return C;
    }
    
  • 相关阅读:
    404、500、502等HTTP状态码介绍
    Linux系统信息查看命令
    SVN clean up 无法继续
    gitlab使用
    Git SSH Key 生成步骤
    gitlab 杂记
    JS函数
    MySQL基础
    WEB测试方法
    操作系统的发展史
  • 原文地址:https://www.cnblogs.com/Lngstart/p/12263259.html
Copyright © 2011-2022 走看看