百度百科>
#include<iostream> #include<vector> #include<string> using namespace std; struct wint:vector<int> { wint(int n=0) { push_back(n); check(); } wint& check()// { while(!empty()&&!back())pop_back(); if(empty())return *this; for(int i=1; i<size(); ++i) { (*this)[i]+=(*this)[i-1]/10; (*this)[i-1]%=10; } while(back()>=10) { push_back(back()/10); (*this)[size()-2]%=10; } return *this;// } }; istream& operator>>(istream &is,wint &n) { string s; is>>s; n.clear(); for(int i=s.size()-1; i>=0; --i)n.push_back(s[i]-'0'); return is; } ostream& operator<<(ostream &os,const wint &n) { if(n.empty())os<<0; for(int i=n.size()-1; i>=0; --i)os<<n[i]; return os; } //常量引用当参数,避免拷贝更高效 bool operator!=(const wint &a,const wint &b) { if(a.size()!=b.size())return 1; for(int i=a.size()-1; i>=0; --i) if(a[i]!=b[i])return 1; return 0; } bool operator==(const wint &a,const wint &b) { return !(a!=b); } bool operator<(const wint &a,const wint &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 0; } bool operator>(const wint &a,const wint &b) { return b<a; } bool operator<=(const wint &a,const wint &b) { return !(a>b); } bool operator>=(const wint &a,const wint &b) { return !(a<b); } wint& operator+=(wint &a,const wint &b) { if(a.size()<b.size())a.resize(b.size()); for(int i=0; i!=b.size(); ++i)a[i]+=b[i]; return a.check(); } wint operator+(wint a,const wint &b) { return a+=b; } wint& operator-=(wint &a,wint b) { if(a<b)swap(a,b); for(int i=0; i!=b.size(); a[i]-=b[i],++i) if(a[i]<b[i])//需要借位 { int j=i+1; while(!a[j])++j; while(j>i) { --a[j]; a[--j]+=10; } } return a.check(); } wint operator-(wint a,const wint &b) { return a-=b; } wint operator*(const wint &a,const wint &b) { wint n; n.assign(a.size()+b.size()-1,0); for(int i=0; i!=a.size(); ++i) for(int j=0; j!=b.size(); ++j) n[i+j]+=a[i]*b[j]; return n.check(); } wint& operator*=(wint &a,const wint &b) { return a=a*b; } wint divmod(wint &a,const wint &b) { wint ans; for(int t=a.size()-b.size(); a>=b; --t) { wint d; d.assign(t+1,0); d.back()=1; wint c=b*d; while(a>=c) { a-=c; ans+=d; } } return ans; } wint operator/(wint a,const wint &b) { return divmod(a,b); } wint& operator/=(wint &a,const wint &b) { return a=a/b; } wint& operator%=(wint &a,const wint &b) { divmod(a,b); return a; } wint operator%(wint a,const wint &b) { return a%=b; } wint pow(const wint &n,const wint &k) { if(k.empty())return 1; if(k==2)return n*n; if(k.front()%2)return n*pow(n,k-1); return pow(pow(n,k/2),2); } int main() { wint a,b; cin>>a>>b; cout<<(a<b)<<endl <<(a==b)<<endl <<a+b<<endl <<a-b<<endl <<a*b<<endl <<a/b<<endl <<a%b<<endl <<pow(a,b); }
标签:const,高精度,int,wint,板子,operator,return,size From: https://www.cnblogs.com/towboa/p/17367501.html