ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法学习之路 高精度算法

2022-07-28 12:00:07  阅读:139  来源: 互联网

标签:高精度 int back 学习 -- 算法 vector push size


 //高精度加法模板

 #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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有