基础算法----高精度

写在前面

应用了vector头文件#include<vector>

vector基本操作:
(1)头文件#include.

(2)创建vector对象,vector vec;

(3)尾部插入数字:vec.push_back(a);

(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。

(5)使用迭代器访问元素.

vector v:
最大值:
int max = *max_element(v.begin(),v.end());
最小值:
int min = *min_element(v.begin(),v.end());

vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)  cout<<*it<<endl;

(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

(7)删除元素: vec.erase(vec.begin()+2);删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

(8)向量大小:vec.size();

(9)清空:vec.clear();

可用auto类型自动接收结果

对数据的读入

int main(){
    vector<int> A,B;
    string 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');
}

高精度加法模板

vector<int> add(vector<int> &A,vector<int> &B){
    int t = 0;
    vector<int> C;
    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;
}

高精度减法模板

//比较大小if(cmp(A,B)) -> sub(A,B)  else -> sub(B,A)  + cout<<'-';
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;
}

高精度乘法模板

需要注意乘法运算的b不是高精度数。

vector<int> mul(vector<int> &A,int b){
    int t = 0;
    vector<int> C;
    for(int i = 0;i < A.size(); i ++){
        t += A[i] * b;
        C.push_back(t % 10);
        t /= 10;
    }
    if(t > 0) C.push_back(t);
    while(C.size() > 1 && C.back() == 0) C.pop_back();
    return C;
}

高精度除法模板

是除以低精度
使用了reverse所以要包含头文件

vector<int> div(vector<int> &A,int b ,int &r){
    r = 0;
    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;
}
posted @ 2021-03-25 20:51  Xuuxxi  阅读(50)  评论(0编辑  收藏  举报