Advertisement
ewa_tabor

DLbez *

May 14th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. using namespace std;
  5.  
  6.  
  7. //klasy pochodne, protected (jak private, tylko ze dostepne dla klas pochodnych),
  8. //klasa pochodna do klasy DL, operator *, ==, !=, >,<
  9. // http://www.cplusplus.com/forum/beginner/151124/   POMOCNY LINK
  10. class duzaLiczba{
  11.     protected:
  12.     friend ostream & operator<< (ostream & s1, duzaLiczba & o1);
  13.     friend istream & operator>>(istream & s1, duzaLiczba & o1);
  14.     char* wsk;
  15.     public:
  16.     duzaLiczba(){
  17.         wsk=NULL;
  18.     }
  19.  
  20.     ~duzaLiczba(){
  21.         if (wsk!=""){
  22.             delete [] wsk;
  23.             wsk=NULL;
  24.         }
  25.     }
  26.  
  27.     duzaLiczba(const char* o1){
  28.         if (this->wsk!=NULL){
  29.             delete [] this->wsk;
  30.             this->wsk=NULL;
  31.         }
  32.         this->wsk=new char[strlen(o1)];
  33.         for (int i = 0; i < strlen(o1); i++){
  34.             this->wsk[i] = o1[i];
  35.         }
  36.     }
  37.  
  38.     duzaLiczba & operator=(const duzaLiczba & o1){
  39.       if (this->wsk!=NULL){
  40.             delete [] this->wsk;
  41.             this->wsk=NULL;
  42.         }
  43.       this -> wsk = new char[strlen(o1.wsk)-1];
  44.       for (int i = 0; i< strlen(o1.wsk); i++){
  45.           this->wsk[i]=o1.wsk[i];
  46.       }
  47.       return *this;
  48.     }
  49.  
  50.  
  51.     duzaLiczba  operator+(const duzaLiczba &o1){
  52.         int length1=strlen(this->wsk);
  53.         int length2=strlen(o1.wsk);
  54.         int maxl, add1, add2,add=0;
  55.         static duzaLiczba wynik;
  56.         if (length1>length2) maxl=length1;
  57.         else maxl=length2;
  58.         if (o1.wsk[0]-'0'+this->wsk[0]-'0'+1>10) wynik.wsk=new char[maxl+1];
  59.         else wynik.wsk=new char[maxl];
  60.         for (int i=maxl+1;i>0;i--){
  61.             add1=0;
  62.             add2=0;
  63.             if (length1>0) add1=this->wsk[length1-1]-'0';
  64.             if(length2>0) add2=o1.wsk[length2-1]-'0';
  65.            
  66.             add1=add1+add2+add;
  67.             add=0;
  68.             if(add1>9){
  69.                 add=1;
  70.                 add1=add1%10;
  71.             }
  72.            
  73.             wynik.wsk[i-1]=add1+'0';
  74.             length1--;
  75.             length2--;
  76.         }
  77.         wynik.wsk[maxl+1]='\0';
  78.        
  79.   return wynik;
  80.   }
  81.  
  82. };//koniec duzaLiczba
  83.  
  84. istream & operator >> (istream & s1, duzaLiczba & o1){
  85.   if (o1.wsk != NULL) delete o1.wsk;
  86.   string input;
  87.   s1 >> input;
  88.   o1.wsk = new char[input.size()+1];
  89.   for (int i=0;i<input.size()+1;i++){
  90.     o1.wsk[i]=input[i];
  91.   }
  92.   o1.wsk[input.size()+1]='\0';
  93.   return s1;
  94. }
  95.  
  96. ostream & operator <<(ostream & s1, duzaLiczba & o1){
  97.     int i=0;
  98.     if (o1.wsk[0]='0') i=1;
  99.     for (; i < strlen(o1.wsk); i++){
  100.         s1 << o1.wsk[i];
  101.     }
  102.     s1 << endl;
  103.     return s1;
  104. }
  105.  
  106. class duzaLiczba2: public duzaLiczba {
  107.     public:
  108.     duzaLiczba2():duzaLiczba() {}
  109.     ~duzaLiczba2(){
  110.         if (wsk!=""){
  111.             delete [] wsk;
  112.             wsk=NULL;
  113.         }
  114.     }
  115.     duzaLiczba2 (const duzaLiczba2 &o1):duzaLiczba(o1){
  116.         if (this->wsk!=""){
  117.             delete [] this->wsk;
  118.             this->wsk=NULL;
  119.         }
  120.         this->wsk=new char[strlen(o1.wsk)-1];
  121.         for (int i=0; i<strlen(o1.wsk); i++) this->wsk[i]=o1.wsk[i];
  122.     }
  123.     duzaLiczba2 & operator= (duzaLiczba2 const &o1){
  124.         int i;
  125.         duzaLiczba2 wynik;
  126.        
  127.         if(this != &o1){   
  128.             delete [] this->wsk;   
  129.             int len=strlen(o1.wsk);
  130.             this->wsk= new char[len];
  131.             for(i=0;i<len;i++){
  132.                 this->wsk[i]=o1.wsk[i];
  133.             }      
  134.         }
  135.         return *this;
  136.     }
  137.  
  138.     /*duzaLiczba2 &operator * (const duzaLiczba &o1){
  139.         int a=strlen(o1.wsk),b=strlen(this->wsk);
  140.         duzaLiczba2 wynik;
  141.         wynik.wsk = new char[a+b-1];
  142.         int add,c;
  143.         if (a>b){
  144.             for (int i=0; i<b;i++){
  145.                 for (int j=0;j<a;j++){
  146.                     c=(this->wsk[j]-'0')*(o1.wsk[i]-'0');
  147.                     wynik.wsk[i]=(((c%10)+(wynik.wsk[i]-'0'))%10)+'0';
  148.                     if ((c%10)+(wynik.wsk[i]-'0')>9)
  149.                 }
  150.             }
  151.         }
  152.        
  153.     }*/
  154.    
  155.     bool operator == (const duzaLiczba2 &o1){
  156.         if (strlen(this->wsk)!=strlen(o1.wsk)) return false;
  157.         for (int i=0;i<strlen(o1.wsk);i++){
  158.             if (o1.wsk[i]!=this->wsk[i]) return false;
  159.         }
  160.         return true;
  161.     }
  162.     bool operator != (const duzaLiczba2 &o1){
  163.         if (strlen(this->wsk)!=strlen(o1.wsk)) return true;
  164.         for (int i=0;i<strlen(o1.wsk);i++){
  165.             if (this->wsk[i]==o1.wsk[i]) return false;
  166.         }
  167.         return true;
  168.     }
  169.     bool operator > (const duzaLiczba2 &o1){
  170.         if (strlen(this->wsk)>strlen(o1.wsk)) return true;
  171.         if (strlen(this->wsk)<strlen(o1.wsk)) return false;
  172.         for (int i=strlen(o1.wsk)-1; i>=0 ;i--){
  173.             if (o1.wsk[i] > this->wsk[i]) return false;
  174.         }
  175.         if (o1.wsk[0]==this->wsk[0]) return false;
  176.         return true;
  177.     }
  178.     bool operator < (const duzaLiczba2 &o1){
  179.         if (strlen(this->wsk)<strlen(o1.wsk)) return true;
  180.         if (strlen(this->wsk)>strlen(o1.wsk)) return false;
  181.         for (int i=strlen(o1.wsk)-1; i>=0 ;i--){
  182.             if (o1.wsk[i] < this->wsk[i]) return false;
  183.         }
  184.         if (o1.wsk[0]==this->wsk[0]) return false;
  185.         return true;
  186.     }
  187.    
  188.  
  189.  
  190.  
  191.  
  192.  
  193. };
  194.  
  195. int main(){
  196.   duzaLiczba a, b, c;
  197.   cin >> a;
  198.   cin >> b;
  199.   c=a+b;
  200.   cout<<c;
  201.   //if (a<b) cout<<"nie";
  202.   return 0;
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement