编程语言
首页 > 编程语言> > 算法学习之路 高精度算法

算法学习之路 高精度算法

作者:互联网

 //高精度加法模板

 #include<bits/stdc++.h> 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 = t/10;     }     if(t)     C.push_back(t);     return C; } int main() {     string a;     string b;     vector<int>A;     vector<int>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; }       //高精度减法模板  #include<bits/stdc++.h> using namespace std;  bool cmp(vector<int> &A,vector<int> &B)  {     if(A.size() != B.size())      return A.size() > B.size();     else     {         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)     {         /* code */         C.pop_back();     }     return C;  } int main() {     string a;     string b;     vector<int>A;     vector<int>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))     {         vector<int> C = sub(A,B);         for (int i = C.size()-1; i >= 0;i--)         {             /* code */             cout<<C[i];         }     }     else     {         vector<int> C = sub(B,A);         for (int i = C.size()-1; i >= 0; i--)         {             /* code */             cout<<C[i];         }             }            return 0; }  //高精度乘法模板  #include<bits/stdc++.h> using namespace std;  vector<int> mul(vector<int> &A,int b)  {     vector<int>C;     int t = 0;     for(int i = 0;i <= A.size()-1;i++ )     {         t += A[i]*b;         C.push_back(t%10);         t /= 10;     }     if(t) C.push_back(t);     return C;  }   int main() {     string a;     int b;     vector<int>A;     cin>>a>>b;     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; }  //高精度除法模板 #include<bits/stdc++.h>  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)     {         /* code */         C.pop_back();     }    
    return C;  } int main() {     string a;     int b;     int r;//余数     vector<int>A;     cin>>a>>b;     for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');     auto C = div(A,b,r);     for(int i = C.size()-1 ;i >= 0 ;i--)     {         cout<<C[i];     }     cout<<endl;     cout<<r;    return 0; }

标签:高精度,int,back,学习,--,算法,vector,push,size
来源: https://www.cnblogs.com/Mr-yinghexiaoma/p/16525842.html