Advertisement
wilk_maciej

duze_liczby

Apr 23rd, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. using namespace std;
  5.  
  6.  
  7. // nowy typ danych
  8. // konstruktor, destruktor, operator = + >> <<
  9. // jedna cyfra to co najmniej jeden bajt
  10. // pięć linijek jednej liczby (ok 80 znaków), pięć drugiej, trzecia = 1 + 2, cout trzecia
  11. // http://www.cplusplus.com/forum/beginner/151124/   POMOCNY LINK
  12. class Big_number{
  13.   friend ostream & operator<< (ostream & s1, Big_number & o1);
  14.   friend istream & operator>>(istream & s1, Big_number & o1);
  15.   char* number;
  16. public:
  17.    
  18.   Big_number(){
  19.     number=NULL;
  20.   }
  21.  
  22.   ~Big_number(){
  23.     if (number!=""){
  24.       delete [] number;
  25.       number=NULL;
  26.     }
  27.   }
  28.  
  29.   Big_number(const char* o1){
  30.     for (int i = 0; i < strlen(o1); i++){
  31.     this->number[i] = o1[i];
  32.     }
  33.   }
  34.  
  35.   Big_number & operator=(const Big_number & o1){
  36.   if (this->number!=NULL){
  37.     delete [] number;
  38.     number = NULL;
  39.   }
  40.   this -> number = new char[strlen(o1.number)];
  41.   for (int i = 0; i< strlen(o1.number); i++){
  42.     this->number[i]=o1.number[i];
  43.   }
  44.   return *this;
  45.   }
  46.  
  47.  
  48.   Big_number  operator+(const Big_number &o1){
  49.     int length1=strlen(this->number);
  50.     int length2=strlen(o1.number);
  51.     int max;
  52.     Big_number added_number;
  53.     if (length1>length2){
  54.       max=length1;
  55.     }
  56.     else max=length2;
  57.     if (max==length1){
  58.       added_number=*this;
  59.       for (int i = max-1; i>=0 ; i--){
  60.         int liczba =int(this -> number[length1-1]) -'0';
  61.         int dodawana;
  62.         if (length2>0){
  63.           dodawana = int(o1.number[length2-1]) -'0';
  64.         }
  65.         else dodawana=0;
  66.         liczba = liczba+dodawana;
  67.         length1--;
  68.         length2--;
  69.         if (liczba>9){
  70.           liczba = liczba-10;
  71.           char cyfra_powrotna = char(liczba)+'0';
  72.           if (i-1>=0){
  73.             added_number.number[i] = cyfra_powrotna;
  74.             added_number.number[i-1]++;
  75.           }
  76.           else{
  77.             added_number.number[i] = cyfra_powrotna;
  78.             for (int j=max; j>0;j--){
  79.               added_number.number[j]=added_number.number[j-1];
  80.             }
  81.             added_number.number[0]='1';
  82.           }
  83.         }
  84.         else{
  85.           char cyfra_powrotna = char(liczba)+'0';
  86.           added_number.number[i]=cyfra_powrotna;
  87.         }
  88.       }
  89.     }
  90.     if (max==length2 && length1!=length2){
  91.       added_number=o1;
  92.       for (int i = max-1; i>=0 ; i--){
  93.         int liczba =int(o1.number[length2-1]) -'0';
  94.         int dodawana;
  95.         if (length2>0){
  96.           dodawana = int(this->number[length1-1]) -'0';
  97.         }
  98.         else dodawana=0;
  99.         liczba = liczba+dodawana;
  100.         length1--;
  101.         length2--;
  102.         if (liczba>9){
  103.           liczba = liczba-10;
  104.           char cyfra_powrotna = char(liczba)+'0';
  105.           if (i-1>=0){
  106.             added_number.number[i] = cyfra_powrotna;
  107.             added_number.number[i-1]++;
  108.           }
  109.           else{
  110.             added_number.number[i] = cyfra_powrotna;
  111.             for (int j=max; j>0;j--){
  112.               added_number.number[j]=added_number.number[j-1];
  113.             }
  114.             added_number.number[0]='1';
  115.           }
  116.         }
  117.         else{
  118.           char cyfra_powrotna = char(liczba)+'0';
  119.           added_number.number[i]=cyfra_powrotna;
  120.         }
  121.       }
  122.     }
  123.   return added_number;
  124.   }
  125.  
  126. };//koniec Big_number
  127.  
  128. istream & operator >> (istream & s1, Big_number & o1){
  129.   if (o1.number != NULL) delete o1.number;
  130.   string input;
  131.   s1 >> input;
  132.   o1.number = new char[input.size()+1];
  133.   for (int i=0;i<input.size()+1;i++){
  134.     o1.number[i]=input[i];
  135.   }
  136.   o1.number[input.size()+1]='\0';
  137.   return s1;
  138. }
  139.  
  140. ostream & operator <<(ostream & s1, Big_number & o1){
  141.   for (int i = 0; i < strlen(o1.number); i++){
  142.     s1 << o1.number[i];
  143.   }
  144.   s1 << endl;
  145.   return s1;
  146. }
  147.  
  148. int main(){
  149.   Big_number a, b, c;
  150.   cin >> a;
  151.   cin >> b;
  152.   cout <<"a= "<< a <<"b= "  <<b;
  153.   c=a;
  154.   cout <<"c= "<< c <<"a= "<<a;
  155.   c=a+b;
  156.   cout <<"c=a+b= " <<c;
  157.   return 0;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement