#include #include #include #include class BigInt { private: char semn; unsigned char nr[400]; int dim; public: BigInt(); //constructor cu citire de la tastatura BigInt(int); friend ostream& operator<<(ostream&,const BigInt&); friend istream& operator>>(istream&, BigInt&); int Pozitiv(int x); int Max(BigInt); BigInt operator+(BigInt); template BigInt operator+(tip); BigInt operator-(BigInt); template BigInt operator-(tip); template BigInt operator*(tip); template BigInt operator/(tip); template BigInt operator%(tip); int operator==(BigInt); //intoarce 1 daca e adev si 0 pt fals int operator<(BigInt); int operator<=(BigInt); int operator>(BigInt); int operator>=(BigInt); int operator!=(BigInt); int operator!(); template int operator==(tip); template int operator<(tip); template int operator<=(tip); template int operator>(tip); template int operator>=(tip); template int operator!=(tip); }; //######################################################################### BigInt::BigInt() {char x; signed char t[400]; int i; printf("\nNumarul cu semn "); do semn=getche(); while((semn!='+')&&(semn!='-')); dim=0; do {x=getche(); t[dim]=x-'0'; dim++; } while((x>='0')&&(x<='9')); dim--; for(i=0;i=0) semn='+'; else {semn='-'; x=Pozitiv(x); } dim=0; i=0; while(x!=0) {nr[i]=x%10; i++; dim=i; x=x/10;} } ostream& operator<<(ostream& out,const BigInt& a) {int i; out<>(istream& in, BigInt& a) {char t[400]; int i; do in>>a.semn; while((a.semn!='+')&&(a.semn!='-')); a.dim=0; cin.get(t,40); for(i=0;i='0')&&(t[i]<='9')) {t[i]=t[i]-'0'; a.dim++; } else break; } for(i=0;ib.dim)?dim:b.dim; c.semn=semn; k=0; for(i=0;i BigInt BigInt::operator+(tip x) {BigInt c(0),b(x); c=*this+b; return c; } int BigInt::Max(BigInt b) {int i,m; m=dim=0)) {m=nr[i]-b.nr[i]; i--; } return m; } BigInt BigInt::operator-(BigInt b) {int i,m,impr; BigInt c(0),aux(0); m=this->Max(b); if(m>0) c.semn=this->semn; else if(m<0) c.semn=(this->semn=='+')?'-':'+'; else {m=0; c.dim=0;c.semn='+';} if(m!=0) {if(m<0) {aux=*this; *this=b; b=aux; } impr=0; for(i=0;idim;i++) {c.nr[i]=this->nr[i]-(idim; while(c.nr[c.dim-1]==0) c.dim--; } } return c; } template BigInt BigInt::operator-(tip x) {BigInt b(x),c(0); c=*this-b; return c; } template BigInt BigInt::operator*(tip x) {int i; signed char t,s1; BigInt b(0); b.semn=semn; t=0; for(i=0;i BigInt BigInt::operator/(tip x) {int i,r,k,temp[401]; BigInt t(0); t.semn=semn; if(x==0) cout<<"Operatie lipsita de sens!"; else { t.dim=1; if(nr[dim-1]>=x) {temp[0]=nr[dim-1]/x; r=nr[dim-1]%x; i=2; while(i BigInt BigInt::operator%(tip x) {BigInt r(0); r=(*this)/x; r=(*this)-r*x; return r; } int BigInt::operator==(BigInt b) {int i,vb; if((semn==b.semn)&&(dim==b.dim)) {vb=0; i=0; while((vb==0)&&(i int BigInt::operator==(tip x) {BigInt b(x); if(*this==b) return 1; return 0; } int BigInt::operator<(BigInt b) {int i,vb; if((semn!=b.semn)&&(semn=='-')) return 1; else if(semn=='+') {if(dimb.dim) return 1; if(dim==b.dim) {vb=0; i=dim-1; while((vb==0)&&(i!=-1)) {if(nr[i]>b.nr[i]) vb=1; i--; } if(vb==1) return 1; } } } return 0; } template int BigInt::operator<(tip x) {BigInt b(x); if(*this int BigInt::operator<=(tip x) {BigInt b(x); if(*this(BigInt b) { if(*this int BigInt::operator>(tip x) {BigInt b(x); if(*this=(BigInt b) { if(*this>b) return 1; if(*this==b) return 1; return 0; } template int BigInt::operator>=(tip x) {BigInt b(x); if(*this>b) return 1; if(*this==b) return 1; return 0; } int BigInt::operator!=(BigInt b) {int i,vb; if(semn!=b.semn) return 1; else if(dim!=b.dim) return 1; else {vb=0; i=0; while((vb==0)&&(i int BigInt::operator!=(tip x) {BigInt b(x); if(*this!=b) return 1; return 0; } int BigInt::operator!() { if((dim==0)&&(nr[dim]==0))return 1; return 0; } //######################################################################## void main() { BigInt a(123456); int x=12; cout<<"Numarul mare: "<x"; a>x?cout<<" True\n":cout<<" False\n"; cout<<"a>=x"; a>=x?cout<<" True\n":cout<<" False\n"; cout<<"a!=x"; a!=x?cout<<" True\n":cout<<" False\n"; cout<<"!x"; !x?cout<<" True\n":cout<<" False\n"; }