Facebook
From Voluminous Moth, 3 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 137
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. int main()
  5. {
  6. int wybor ;
  7. cin >> wybor ;
  8. switch(wybor)
  9.         {
  10.             case 1 :
  11.                 {
  12.                     int liczba ;
  13.                     int ilosc = 0 ;
  14.                     int tymcz = 0 ;
  15.                     int bufor2 ;
  16.                     unsigned int maska = 0x80000000;
  17.                     cin >> liczba ;
  18.                     bufor2 = liczba ;
  19.                     if (liczba > 0)
  20.                 {
  21.                     while (bufor2 != 0 )
  22.                         {
  23.                          bufor2 = bufor2 >> 1 ;
  24.                          ilosc++ ;
  25.                         }
  26.                     bufor2 = liczba ;
  27.                     while (tymcz != 0x80000000) // przesunienie na maxa do prawej
  28.                     {
  29.                         bufor2 = bufor2 << 1;
  30.                         tymcz = bufor2 & maska ;
  31.                     }
  32.                     for (int i=0 ; i<ilosc ; i++)
  33.                     {
  34.                         tymcz = bufor2 & maska ;
  35.                         if(tymcz == 0 )
  36.                         {
  37.                             cout << "0";
  38.                         }
  39.                         else if (tymcz == maska)
  40.                         {
  41.                             cout <<"1";
  42.                         }
  43.                     bufor2 = bufor2 << 1 ;
  44.                     }
  45.                 }
  46.  
  47.                 else if (liczba < 0) // dla liczb ujemnych
  48.                 {
  49.                     while(tymcz != 1) // sprawdzamy ile 0 jest z prawej
  50.                     {
  51.                         ilosc ++  ;
  52.                         bufor2 = bufor2 >> 1 ;
  53.                         tymcz = bufor2 & 1 ;
  54.                     }
  55.                     bufor2 = liczba ;
  56.                     for (int i=0; i<32-ilosc; i++) // przepisujemy liczby od prawej bez koncowych zer
  57.                     {
  58.                     tymcz = bufor2 & maska ; // wyciągamy jakie sa kolejne bity
  59.                         if (tymcz == 0)
  60.                         {
  61.                             cout <<"0" ;
  62.                         }
  63.                         else if (tymcz == maska)
  64.                         {
  65.                             cout <<"1";
  66.                         }
  67.                         bufor2 = bufor2 << 1 ;
  68.  
  69.                     }
  70.                 }
  71.                     break ;
  72.                 }
  73.             case 2: //  liczenie zer pomiedzy skrajnymi jedynkami
  74.                 {
  75.                     int zmienna = 0 ;
  76.                     int licznik = 0;
  77.                     unsigned int maska = 1 ;
  78.                     int bufor = 0 ;
  79.                     cin >> zmienna ;
  80.                     bufor = zmienna & maska ;
  81.                     while(bufor != 1) // wyznaczamy liczbe ktora jako pierwszy bit bedzie miala skrajna jedynke
  82.                                 {
  83.                                     zmienna = zmienna >> 1;
  84.                                     bufor = zmienna & maska ;
  85.                                 }
  86.                     if (zmienna > 0 )
  87.                         {
  88.                             while(zmienna != 1) // petla dziala do czasu gdy zmienna bedzie miala ostatni bit na koncu czyli 1
  89.                                 {
  90.                                     bufor = zmienna & maska ;
  91.                                     if (bufor == 0) {licznik++ ;}
  92.                                     zmienna = zmienna >> 1 ;
  93.                                 }
  94.                         }
  95.                     else if (zmienna < 0)
  96.                         {
  97.                             while(zmienna != -1) // petla dziala do czasu gdy zmienna bedzie miala ostatni bit na koncu czyli -1
  98.                                 {
  99.                                     bufor = zmienna & maska ;
  100.                                     if (bufor == 0) {licznik++ ;}
  101.                                     zmienna = zmienna >> 1 ;
  102.                                 }
  103.                         }
  104.  
  105.                     cout << licznik << endl;
  106.                     break ;
  107.                 }
  108. case 3 :
  109.                 {
  110.                     int liczba ;
  111.                     int maska = 0x80000000 ;
  112.                     unsigned int maska2 =0x00000001 ;
  113.                     int bufor=0 ;
  114.                     int bufor2 =0;
  115.                     int war = 0;
  116.                     int war2 = 0 ;
  117.                     int suma_mask = 0x80000001 ;
  118.                     int suma_mask2 = 0 ;
  119.                     int licznik = 0 ;
  120.                     cin >> liczba ;
  121.                     bufor = liczba ;
  122.                     bufor2 = liczba ;
  123.                     bool palindrom  = true ;
  124.                     if (liczba < 0) // dzialanie dla liczb ujemnych
  125.                     {
  126.                     for (int i=0; i<16 ; i++)
  127.                         {
  128.                             war = bufor & maska ; // sprawdzenie z lewej strony cyferki
  129.                             war2 = bufor2 & maska2; // sprawdzenie z prawej strony cyferki
  130.                             suma_mask2 = war | war2 ;
  131.                             if (suma_mask2 == suma_mask || suma_mask2 == 0 )
  132.                                 {
  133.                                     bufor = bufor << 1 ;
  134.                                     bufor2 = bufor2 >> 1;
  135.                                     continue;
  136.                                 }
  137.                             else
  138.                                 {
  139.                                     palindrom = false;
  140.                                     break ;
  141.                                 }
  142.  
  143.                         }
  144.                         cout << palindrom ;
  145.                     }
  146.  
  147.                     else if (liczba > 0) // dla liczby wiekszej od zera
  148.                     {
  149.                         while (bufor!=0)
  150.                         {
  151.                             bufor = bufor >> 1 ;
  152.                             licznik++ ;
  153.  
  154.                         }
  155.                     bufor = liczba ;
  156.                     bufor = bufor << 32-licznik ; // przesuwamy max w lewo
  157.                     for (int j=0 ; j<licznik ; j++)
  158.  
  159.                         {
  160.                             war = bufor & maska ;
  161.                             war2 = bufor2 & maska2 ;
  162.                             suma_mask2 = war | war2 ;
  163.                             if (suma_mask2 == suma_mask || suma_mask2 == 0 ) // dwie skrajne liczby sa takie same
  164.                                 {
  165.                                     bufor = bufor << 1 ;
  166.                                     bufor2 = bufor2 >> 1;
  167.                                     continue;
  168.                                 }
  169.                             else // jezeli jakakolwiek liczba sie nie zgadza, to przerywamy dzialanie
  170.                                 {
  171.                                     palindrom = false;
  172.                                     break ;
  173.                                 }
  174.                         }
  175.                     cout << palindrom ;
  176.  
  177.  
  178.                     }
  179.  
  180.  
  181.                     break ;
  182.                 }
  183.             default:
  184.                 {
  185.                     cout << "Wrong task number." ;
  186.                     break ;
  187.                 }
  188.         }
  189.  
  190. return 0 ;
  191. }
  192.