当前位置: 代码迷 >> 综合 >> 高精度问题(加减乘除)
  详细解决方案

高精度问题(加减乘除)

热度:12   发布时间:2023-11-23 18:09:34.0

高精度问题(加减乘除)
1.加

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

2.减:前提:A>=B

vector<int> sub(vertor<int> &A,vertor<int> &B)
{
    vector<int> C;for(int i=0,t=0;i<A.size();i++){
    t=A[i]-t;if(i<B.size()) t=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;
}

3.乘(高精度*低精度)

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=t+A[i]*b;C.push_back(t%10);t=t/10; }while(C.size() >1&&C.back() ==0) C.pop_back() ;return C;
}

4.除(高精度/低精度)

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=r%b; }reverse(C.begin() ,C.end() );while(C.size() >1&&C.back() ==0) C.pop_back() ;return C;
}