Guest User

Untitled

a guest
Mar 15th, 2021
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1.  
  2.  
  3. #include <iostream>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. unsigned toString(unsigned n, unsigned p, char* code);
  9.  
  10. bool isPalindrom(char* s, unsigned k);
  11.  
  12.  
  13. int main()
  14. {
  15.    
  16.  
  17.     unsigned m, n, p; // zakres liczb m..n; p: podstawa zapisu
  18.     unsigned k;       // liczba cyfr w zapisie przy podstawie p  
  19.     char code[33] = { 0 };// Co najwyżej 32 cyfry rozwinięcia unsigned
  20.  
  21.  
  22.     setlocale(LC_ALL, "pl-PL.UTF8");
  23.  
  24.     cout << "Program sprawdza, które liczby całkowite > 0 z zakresu m..n \n";
  25.     cout << "są w zapisie przy podstawie p palindromami. \n";
  26.     cout << "Liczby na wejściu podawane są w zapisie dziesiętnym. \n";
  27.     cout << "m, n <= 0 --> koniec programu.\n";
  28.     cout << "Uwaga: podstawa p musi być ze zbioru {2 .. 36}. \n";
  29.  
  30.  
  31.     while (true) { // Konwersacja
  32.         cout << "\nzakres m..n i podstawa p: m n p = ";
  33.         cin >> m >> n >> p;
  34.         if (m <= 0 || n <= 0) break;
  35.  
  36.  
  37.         for (unsigned i = m; i <= n; ++i) {
  38.  
  39.             k = toString(i, p, code);
  40.             if (isPalindrom(code, k))
  41.                 cout << i << " = " << code << endl;
  42.         }
  43.  
  44.     }
  45.     cout << "\nKoniec programu\n";
  46. }
  47.  
  48.  
  49.  
  50. // Zwraca true jeśli liczba k-cyfrowa w s jest palindromem.
  51.  
  52. bool isPalindrom(char* s, unsigned k)
  53. {
  54.     std::string num_str(s);
  55.     std::string num_reversed = std::string(num_str.rbegin(), num_str.rend());
  56.     return num_str == num_reversed;
  57. }
  58.  
  59. // Konwersja liczby dodatniej n na postać znakową
  60. // w zapisie przy podstawie p do tablicy code.
  61. // Funkcja zwraca liczbę znaków rozwinięcia przy podstawie p.
  62. // Uwaga: w zależności od p: cyfry ze zbioru {0..9, A..Z}.
  63.  
  64. unsigned toString(unsigned n, unsigned p, char* code)
  65. {
  66.  
  67.     const string signs{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  68.                      'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
  69.                      'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U' };
  70.  
  71.  
  72.     if (n<2 || p>static_cast<int>(signs.size()) - 1) return {};
  73.  
  74.  
  75.     string result;
  76.  
  77.     do
  78.     {
  79.         result += signs[n % p];
  80.        n /= p;
  81.     } while (p > 0);
  82.  
  83.     reverse (begin(result), end(result));
  84.  
  85.     return result;
  86.  
  87.  
  88.  
  89. }
  90.  
Advertisement
Add Comment
Please, Sign In to add comment