Advertisement
MeehoweCK

Untitled

Sep 26th, 2020
1,198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3.  
  4. using namespace std;
  5.  
  6. string odwrotna(string tekst)
  7. {
  8.     string wynik = "";
  9.  
  10.     for(int i = tekst.size() - 1; i >= 0; --i)
  11.     {
  12.         wynik += tekst[i];
  13.     }
  14.     return wynik;
  15. }
  16.  
  17. string suma(string a, string b)
  18. {
  19.     int wynik[100];
  20.     bool flaga = false;
  21.     int cyfra;
  22.     unsigned i;
  23.  
  24.     a = odwrotna(a);
  25.     b = odwrotna(b);
  26.  
  27.     if(a.size() < b.size())
  28.         for(i = a.size(); i < b.size(); ++i)
  29.             a += '0';
  30.     else if(b.size() < a.size())
  31.         for(i = b.size(); i < a.size(); ++i)
  32.             b += '0';
  33.  
  34.     for(i = 0; i < a.size(); ++i)
  35.     {
  36.         cyfra = a[i] + b[i] - 96;
  37.         if(flaga)
  38.             ++cyfra;
  39.         if(cyfra > 9)
  40.         {
  41.             cyfra -= 10;
  42.             flaga = true;
  43.         }
  44.         else
  45.             flaga = false;
  46.         wynik[i] = cyfra;
  47.     }
  48.     string result = "";
  49.  
  50.     for(unsigned j = 0; j < i; ++j)
  51.         result += wynik[j] + 48;
  52.     if(flaga)
  53.         result += '1';
  54.     return odwrotna(result);
  55. }
  56.  
  57. bool druga_wieksza(string a, string b)
  58. {
  59.     if(a.size() > b.size())
  60.         return false;
  61.     if(a.size() < b.size())
  62.         return true;
  63.     for(unsigned i = 0; i < a.size(); ++i)
  64.     {
  65.         if(a[i] > b[i])
  66.             return false;
  67.         if(a[i] < b[i])
  68.             return true;
  69.     }
  70.     return false;
  71. }
  72.  
  73. string roznica(string a, string b)
  74. {
  75.     int wynik[100];
  76.     bool flaga = false;
  77.     bool znak_minus = false;
  78.     int cyfra;
  79.     unsigned i;
  80.  
  81.     if(a == b)
  82.         return "0";
  83.  
  84.     a = odwrotna(a);
  85.     b = odwrotna(b);
  86.  
  87.     if(druga_wieksza(a, b))
  88.     {
  89.         swap(a, b);
  90.         znak_minus = true;
  91.     }
  92.  
  93.     if(a.size() < b.size())
  94.         for(i = a.size(); i < b.size(); ++i)
  95.             a += '0';
  96.     else if(b.size() < a.size())
  97.         for(i = b.size(); i < a.size(); ++i)
  98.             b += '0';
  99.  
  100.  
  101.     for(i = 0; i < a.size(); ++i)
  102.     {
  103.         cyfra = a[i] - b[i];
  104.         if(flaga)
  105.             --cyfra;
  106.         if(cyfra < 0)
  107.         {
  108.             cyfra += 10;
  109.             flaga = true;
  110.         }
  111.         else
  112.             flaga = false;
  113.         wynik[i] = cyfra;
  114.     }
  115.     string result = "";
  116.  
  117.     for(unsigned j = 0; j < i; ++j)
  118.         result += wynik[j] + 48;
  119.     if(result[result.size() - 1] == '0')
  120.         result.erase(result.size() - 1, 1);
  121.     if(znak_minus)
  122.         result += '-';
  123.     return odwrotna(result);
  124. }
  125.  
  126. string iloczyn(string a, string b)
  127. {
  128.     int wynik[100] = {0};
  129.     int flaga = 0;
  130.     int cyfra;
  131.     unsigned i, j;
  132.  
  133.     a = odwrotna(a);
  134.     b = odwrotna(b);
  135.  
  136.     if(a.size() < b.size())
  137.         for(i = a.size(); i < b.size(); ++i)
  138.             a += '0';
  139.     else if(b.size() < a.size())
  140.         for(i = b.size(); i < a.size(); ++i)
  141.             b += '0';
  142.  
  143.     for(i = 0; i < b.size(); ++i)
  144.     {
  145.         for(j = 0; j < a.size(); ++j)
  146.         {
  147.             cyfra = (a[j] - 48) * (b[i] - 48) + flaga;
  148.  
  149.             if(cyfra > 9)
  150.             {
  151.                 flaga = cyfra / 10;
  152.                 cyfra -= (10 * flaga);
  153.             }
  154.             else
  155.                 flaga = 0;
  156.             wynik[i + j] += cyfra;
  157.         }
  158.         if(flaga > 0)
  159.             wynik[i + j + 1] += flaga;
  160.     }
  161.  
  162.     flaga = 0;
  163.  
  164.     for(i = 0; i < 100; ++i)
  165.     {
  166.         wynik[i] += flaga;
  167.         if(wynik[i] > 9)
  168.         {
  169.             flaga = wynik[i] / 10;
  170.             wynik[i] -= (10 * flaga);
  171.         }
  172.         else
  173.             flaga = 0;
  174.     }
  175.  
  176.     bool flague = true;
  177.     string result = "";
  178.  
  179.     for(int k = 99; k >= 0; --k)
  180.     {
  181.         if(flague)
  182.         {
  183.             if(wynik[k] == 0)
  184.                 continue;
  185.             else
  186.                 flague = false;
  187.         }
  188.         result += (wynik[k] + 48);
  189.     }
  190.     return result;
  191. }
  192.  
  193. int main()
  194. {
  195.     string a, b;
  196.     cin >> a >> b;
  197.     cout << "suma: " << suma(a, b) << endl;
  198.     cout << "roznica: " << roznica(a, b) << endl;
  199.     cout << "iloczyn: " << iloczyn(a, b) << endl;
  200.     return 0;
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement