相信之前也有高精度算法了,但是这次带来的是c++版,用到了之前学过的vector容器
先将两个加数存入vector容器中从,然后再像之前一样加减就行
不懂的可以看我之前的文章
直接写代码吧
#include<iostream> #include<vector> using namespace std; vector<int> add(vector<int> &A,vector<int> &B) { vector<int> C; int t=0,i=0; for(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; } int main (void) { int i; string a,b; vector<int> A,B; cin>>a>>b; for(i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0'); for(i=b.size()-1;i>=0;i--)B.push_back(b[i]-'0'); vector<int> C=add(A,B); for(i=C.size()-1;i>=0;i--) { cout<<C[i]; } return 0; }
同理,c++减法
#include<iostream> #include<vector> using namespace std; //判断A是否大于等于B bool cmp(vector<int> &A,vector<int> &B) { int i; //首先先判断长度 if(A.size()!=B.size())return A.size()>B.size(); else { for(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) { int i,t=0; vector<int> C; for(i=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; } int main (void) { int i; string a,b; cin>>a>>b; vector<int> A,B; for(i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0'); for(i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0'); if(cmp(A,B)) { vector<int> C=sub(A,B); for(i=C.size()-1;i>=0;i--)cout<<C[i]; } else { vector<int> C=sub(B,A); printf("-"); for(i=C.size()-1;i>=0;i--)cout<<C[i]; } return 0; }
c++乘法,我这次只写了高精度乘低精度,用的更频繁一点
#include<iostream> #include<vector> using namespace std; vector<int> mul(vector<int> A,int b) { vector<int> C; int t=0,i; for(i=0;i<A.size()||t;i++) { if(i<A.size())t+=A[i]*b; C.push_back(t%10); t/=10; } while(C.size()>1&&C.back()==0)C.pop_back(); return C; } int main (void) { int i; string a; int b; vector<int> A; cin>>a>>b; for(i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0'); vector<int> C=mul(A,b); for(i=C.size()-1;i>=0;i--)printf("%d",C[i]); return 0; }
c++高精度除法
#include<iostream> #include<vector> #include<algorithm> using namespace std; //r代表余数,b代表除数,A代表被除数 vector<int> div(vector<int> &A,int b,int &r) { vector<int> C; r=0; int i=0; for(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; } int main (void) { vector<int> A; string a; int b,i,r; cin>>a>>b; for(i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0'); vector<int> C=div(A,b,r); for(i=C.size()-1;i>=0;i--) cout<<C[i]; cout<<endl<<r<<endl; return 0; }
就这些了