Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class duzaLiczba
- {
- protected:
- friend ostream & operator << (ostream &s1,const duzaLiczba &o1);
- friend istream & operator >> (istream &s1, duzaLiczba &o1);
- char *wsk;
- int size;
- public:
- duzaLiczba ()
- {
- wsk=NULL;
- size=0;
- }
- duzaLiczba (const duzaLiczba &o1){
- size=o1.size;
- wsk=new char[size];
- for (int i = 0; i < size; i++) wsk[i] = o1.wsk[i];
- }
- ~duzaLiczba ()
- {
- if (wsk!=NULL) delete []wsk;
- wsk=NULL;
- size=0;
- }
- duzaLiczba & operator = ( const duzaLiczba &o1)
- {
- if (this==&o1) return *this;
- if (this->wsk!=NULL) this->~duzaLiczba();
- this->size=o1.size;
- this->wsk=new char [o1.size];
- for (int i=0; i<this->size; i++){
- this->wsk[i]=o1.wsk[i];
- }
- return *this;
- }
- duzaLiczba operator + (duzaLiczba &o1)
- {
- if (o1.wsk==NULL) return *this;
- if (this->wsk==NULL) return o1;
- duzaLiczba wynik;
- int add1,add2,add=0;
- if (o1.size<this->size) wynik.size=this->size+1;
- else wynik.size=o1.size+1;
- int lo1=o1.size,lthis=this->size;
- wynik.wsk=new char [wynik.size];
- for (int i=wynik.size-1; i>=0; i--)
- {
- if(lo1>0) add1=o1.wsk[lo1-1]-'0';
- else add1=0;
- if (lthis>0) add2=this->wsk[lthis-1]-'0';
- else add2=0;
- add1=add1+add2+add;
- add=add1/10;
- wynik.wsk[i]=add1%10+'0';
- lo1--;
- lthis--;
- }
- if (wynik.wsk[0]!='0')
- return wynik;
- duzaLiczba temp;
- temp.size=wynik.size-1;
- temp.wsk=new char[temp.size];
- for (int i=0; i<temp.size; i++)
- temp.wsk[i]=wynik.wsk[i+1];
- wynik.~duzaLiczba();
- return temp;
- }
- };
- class duzaLiczba2: public duzaLiczba
- {
- public:
- duzaLiczba2():duzaLiczba(){};
- duzaLiczba2 (const duzaLiczba &o1):duzaLiczba(o1){}
- duzaLiczba2 & operator = (const duzaLiczba2 &o1)
- {
- if (this==&o1) return *this;
- if (this->wsk!=NULL) this->~duzaLiczba();
- this->size=o1.size;
- this->wsk=new char [size];
- for (int i=0; i<o1.size; i++)
- this->wsk[i]=o1.wsk[i];
- return *this;
- }
- duzaLiczba2 & operator * (const duzaLiczba2 &o1){
- static duzaLiczba2 wynik;
- if (o1.wsk==NULL || this->wsk==NULL){
- return wynik;
- }
- wynik.size=o1.size+this->size+1;
- wynik.wsk=new char[wynik.size];
- int i,j;
- int mltp1,mltp2,add=0,add1;
- for(int a=0;a<wynik.size;a++) wynik.wsk[a]='0';
- if (o1.size>this->size){
- cout<<this->wsk[0]<<endl;
- for (i=1; i<=this->size;i++){
- mltp1=this->wsk[this->size-i]-'0';
- for (j=0; j<o1.size; j++){
- mltp2=o1.wsk[o1.size-1-j]-'0';
- add1=wynik.wsk[wynik.size-i-j]-'0';
- add1=add1+mltp1*mltp2+add;
- add=add1/10;
- wynik.wsk[wynik.size-i-j]=add1%10+'0';
- }
- wynik.wsk[wynik.size-i-j]=add+'0';
- add=0;
- }
- }
- else {
- for (i=1; i<=o1.size;i++){
- mltp1=o1.wsk[o1.size-i]-'0';
- for (j=0; j<this->size; j++){
- mltp2=this->wsk[this->size-1-j]-'0';
- add1=wynik.wsk[wynik.size-i-j]-'0';
- add1=add1+mltp2*mltp1+add;
- add=add1/10;
- wynik.wsk[wynik.size-i-j]=add1%10+'0';
- }
- wynik.wsk[wynik.size-i-j]=add+'0';
- add=0;
- }
- }
- int n=0;
- while (true){
- if (wynik.wsk[n]=='0') n++;
- else break;
- }
- if (n==0) return wynik;
- static duzaLiczba2 temp;
- temp.size=wynik.size-n;
- temp.wsk=new char[temp.size];
- for (int t=0; t<temp.size;t++){
- temp.wsk[t]=wynik.wsk[t+n];
- }
- wynik.~duzaLiczba2();
- return temp;
- }
- bool operator == (const duzaLiczba2 &o1)
- {
- if (this->size!=o1.size)
- return false;
- for (int i=0; i<o1.size; i++)
- {
- if (this->wsk[i]!=o1.wsk[i])
- return false;
- }
- return true;
- }
- bool operator != (const duzaLiczba2 &o1)
- {
- if (this->size!=o1.size)
- return true;
- for (int i=0; i<o1.size; i++)
- {
- if (this->wsk[i]!=o1.wsk[i])
- return true;
- }
- return false;
- }
- bool operator > (const duzaLiczba2 &o1)
- {
- if (this->size>o1.size)
- return true;
- if (this->size<o1.size)
- return false;
- for (int i=0; i<o1.size; i++)
- {
- if (this->wsk[i]>o1.wsk[i])
- return true;
- }
- return false;
- }
- bool operator < (const duzaLiczba2 &o1)
- {
- if (this->size<o1.size)
- return true;
- if (this->size>o1.size)
- return false;
- for (int i=0; i<o1.size; i++)
- {
- if (this->wsk[i]<o1.wsk[i])
- return true;
- }
- return false;
- }
- };
- ostream & operator << (ostream &s1, const duzaLiczba &o1)
- {
- for (int i=0; i<o1.size; i++)
- s1<<o1.wsk[i];
- s1<<endl;
- return s1;
- }
- istream & operator >> (istream &s1, duzaLiczba &o1)
- {
- if (o1.wsk!=NULL)
- o1.~duzaLiczba();
- string a;
- s1>>a;
- o1.size=a.size();
- o1.wsk=new char[o1.size];
- for (int i=0; i<o1.size; i++)
- o1.wsk[i]=a[i];
- return s1;
- }
- int main()
- {
- duzaLiczba2 o1, o2, o3, o4;
- cin>>o1;
- cin>>o2;
- if (o1==o2) cout<<"Liczby są równe"<<endl;
- if (o1!=o2) cout<<"Liczby nie są równe"<<endl;
- if (o1>o2) cout<<"Liczba pierwsza większa od drugiej"<<endl;
- if (o1<o2) cout<<"Liczba pierwsza mniejsza od drugiej"<<endl;
- o3=o1+o2;
- cout<<o3;
- o4=o1*o2;
- cout<<o4;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement