Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <bitset>
  3. #include <string.h>
  4. #include <string>
  5. #include <sstream>
  6. #include <algorithm>
  7. #include <vector>
  8. #include <ostream>
  9. #include <iterator>
  10.  
  11. struct smNum
  12. {
  13.     bool sign;
  14.  
  15.     std::vector <unsigned int > module_val;
  16.  
  17.     smNum(){
  18.         sign = false;
  19.         module_val = module_val;
  20.     }
  21.  
  22.     std::string toString_decimal(){
  23.     std::stringstream ss;
  24.     copy( module_val.begin(), module_val.end(), std::ostream_iterator<unsigned int>(ss, " "));
  25.     std::string value = ss.str();
  26.  
  27.         if(sign==0){
  28.             std::string str("+ ");
  29.             return str  + value;
  30.         }
  31.         else{
  32.             std::string str("- ");
  33.             return str  + value;
  34.         }
  35.     }
  36. };
  37. bool isBigger(smNum x, smNum y){
  38.     if (x.module_val.size() > y.module_val.size()){
  39.         return true;
  40.     }   else {
  41.         if(x.module_val[0] > y.module_val[0])
  42.         return true;
  43.     }
  44.     return false;
  45. }
  46.  
  47. smNum add(smNum x, smNum y){
  48.     smNum s;
  49.     bool overflow = false;
  50.     int xSize = x.module_val.size();
  51.     int ySize = y.module_val.size();
  52.     int e=0;
  53.     if(xSize > ySize)
  54.             e = x.module_val.size();
  55.             else e = y.module_val.size();
  56.     if(x.sign == y.sign){ //znaki zgodne
  57.         s.sign = x.sign;
  58.         //dodawanie modulow
  59.         for(int i = 1; i <= e ; i++) {
  60.             if (overflow == false) {
  61.                 s.module_val.insert(s.module_val.begin(), x.module_val[xSize -i]+ y.module_val[ySize-i]);
  62.                if (s.module_val[0] < x.module_val[xSize-i] || s.module_val[0] < y.module_val[ySize-i] )
  63.                     overflow = true; else overflow = false;
  64.                 } else {
  65.                 s.module_val.insert(s.module_val.begin(), x.module_val[xSize-i]+ y.module_val[ySize-i] + 1);
  66.                 if (s.module_val[0] < x.module_val[xSize - i] || s.module_val[0] < y.module_val[ySize-i] )
  67.                     overflow = true; else overflow = false;
  68.                 }
  69.  
  70.        }
  71.        if (overflow == true)
  72.        s.module_val.insert(s.module_val.begin(), 1);
  73.     }
  74.  
  75.     else{ //znaki niezgodne
  76.         if(isBigger(x,y)){
  77.  
  78.             s.sign = x.sign;
  79.             for(int i = 1; i <= e ; i++) {
  80.                 if (overflow == false) {
  81.                     s.module_val.insert(s.module_val.begin(), x.module_val[xSize -i]- y.module_val[ySize-i]);
  82.                     if ( x.module_val[xSize-i]  < y.module_val[ySize-i] )
  83.                         overflow = true; else overflow = false;
  84.                 } else {
  85.                 s.module_val.insert(s.module_val.begin(), x.module_val[xSize-i]- y.module_val[ySize-i] - 1);
  86.                 if (x.module_val[xSize-i]  < y.module_val[ySize-i] )
  87.                     overflow = true; else overflow = false;
  88.                 }
  89.  
  90.             }
  91.         if (overflow == true)
  92.             s.module_val.insert(s.module_val.begin(), 1);
  93.        }
  94.         else
  95.         {
  96.             for(int i = 1; i <= e ; i++) {
  97.                 if (overflow == false) {
  98.                     s.module_val.insert(s.module_val.begin(), y.module_val[ySize -i]- x.module_val[xSize-i]);
  99.                     if (x.module_val[xSize-i]  > y.module_val[ySize-i] )
  100.                         overflow = true; else overflow = false;
  101.                 } else {
  102.                 s.module_val.insert(s.module_val.begin(), y.module_val[ySize-i]- x.module_val[xSize-i] - 1);
  103.                 if (x.module_val[xSize-i]  > y.module_val[ySize-i] )
  104.                     overflow = true; else overflow = false;
  105.                 }
  106.  
  107.             }
  108.         if (overflow == true)
  109.             s.module_val.insert(s.module_val.begin(), 1);
  110.        }
  111.  
  112.     }
  113.     return s;
  114. }
  115.  
  116. int main()
  117. {
  118.  
  119.     smNum m1;
  120.     m1.sign = 1;
  121.     m1.module_val.push_back(222);
  122.     m1.module_val.push_back(4294967295);
  123.     m1.module_val.push_back(234);
  124.     smNum m2;
  125.     m2. sign = 1;
  126.     m2.module_val.push_back(11);
  127.     m2.module_val.push_back(22);
  128.  
  129. smNum s1;
  130. s1 = add (m1, m2);
  131. std::cout<<m1.toString_decimal()<<std::endl;
  132. std::cout<<m2.toString_decimal()<<std::endl;
  133. std::cout<<s1.toString_decimal()<<std::endl;
  134. std::cout<<"ROZNE ZNAKI"<<std::endl;
  135.     smNum m3;
  136.     m3.sign = 1;
  137.     m3.module_val.push_back(222);
  138.     m3.module_val.push_back(4294967295);
  139.     m3.module_val.push_back(234);
  140.     smNum m4;
  141.     m4. sign = 0;
  142.     m4.module_val.push_back(1111);
  143.     m4.module_val.push_back(235);
  144.     smNum s2;
  145.     s2 = add (m3,m4);
  146.     std::cout<<m3.toString_decimal()<<std::endl;
  147. std::cout<<m4.toString_decimal()<<std::endl;
  148. std::cout<<s2.toString_decimal()<<std::endl;
  149.  
  150.  
  151.  
  152.     return 0;
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement