标签:高精度 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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。