Advertisement
ewa_tabor

DuzaLiczba bez *

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