最近发现自己真的菜,连高精度都手写不出来了,在此插眼保存一份模板,以防忘记:
1.高精度加法:
#includeusing namespace std; const int N=100005; string a,b; vector add(vector &A,vector &B) { vector C; int t=0; for(int i=0;i >a>>b; vector 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< 2.高精度减法:
#includeusing namespace std; const int N=1e5+19; bool compare(vector &A,vector &B) { if(A.size()!=B.size()) return A.size()>B.size(); else { for(int i=A.size();i>=0;i--) { if(A[i]!=B[i]) { return A[i]>B[i]; } } } return true; } vector sub(vector &A,vector &B) { int t=0; vector C; for(int i=0;i 1&&C.back()==0) C.pop_back(); return C; } int main() { string a; string b; cin>>a>>b; vector A,B,C; 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(compare(A,B)) { C=sub(A,B); for(int i=C.size()-1;i>=0;i--) cout< =0;i--) cout< 3.高精度乘法:
1.高精度X低精度#includeusing namespace std; const int N=100005; string a; int b; vector mul(vector &A,int &b) { vector C; int t=0; for(int i=0;i 1&&C.back()==0) C.pop_back(); return C; } int main() { cin>>a>>b; vector A,B,C; 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'); C=mul(A,b); for(int i=C.size()-1;i>=0;i--) cout< 2.高精度X高精度
#includeusing namespace std; const int N=100005; string a; string b; vector mul(vector &A,vector &B) { vector C(A.size()+B.size(),0); for(int i=0;i 1&&C.back()==0) C.pop_back(); return C; } int main() { cin>>a>>b; vector A,B,C; 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'); C=mul(A,B); for(int i=C.size()-1;i>=0;i--) cout< 4.高精度除法
1.高精度除以低精度:#includeusing namespace std; const int N=100005; string a; int b; vector div(vector &A,int &b,int &r) { vector C; 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) C.pop_back(); return C; } int main() { cin>>a>>b; vector A,B,C; int r=0;//a/b余多少 for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0'); C=div(A,b,r); for(int i=C.size()-1;i>=0;i--) cout< 2.高精度除以高精度:
#includeusing namespace std; const int N=100005; string a; string b; bool cmp(vector &A, vector &B){ if(A.size()!=B.size()) return A.size()>B.size(); for(int i=A.size()-1;i>=0;i--){ if(A[i]!=B[i]) return A[i]>B[i]; } return true; } vector sub(vector &A,vector &B){ vector C; int t=0; for(int i=0;i 1&&C.back()==0) C.pop_back(); return C; } vector div(vector &A, vector &B, vector &r){ vector C; int j = B.size(); r.assign(A.end()-j,A.end()); while(j<=A.size()){ int k=0; while(cmp(r,B)){ vector s = sub(r,B); r.clear(); r.assign(s.begin(),s.end()); k++; } C.push_back(k); if(j 1&&r.back()==0) r.pop_back(); j++; } reverse(C.begin(),C.end()); while(C.size()>1&&C.back()==0) C.pop_back(); return C; } int main() { cin>>a>>b; vector A,B,C,r; 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'); C=div(A,B,r); for(int i=C.size()-1;i>=0;i--) cout< =0;i--) printf("%d",r[i]); cout< 如果是python玩家:
a=int(input()) b=int(input()) print(a//b) print(a%b)



