Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- unsigned toString(unsigned n, unsigned p, char* code);
- bool isPalindrom(char* s, unsigned k);
- int main()
- {
- unsigned m, n, p; // zakres liczb m..n; p: podstawa zapisu
- unsigned k; // liczba cyfr w zapisie przy podstawie p
- char code[33] = { 0 };// Co najwyżej 32 cyfry rozwinięcia unsigned
- setlocale(LC_ALL, "pl-PL.UTF8");
- cout << "Program sprawdza, które liczby całkowite > 0 z zakresu m..n \n";
- cout << "są w zapisie przy podstawie p palindromami. \n";
- cout << "Liczby na wejściu podawane są w zapisie dziesiętnym. \n";
- cout << "m, n <= 0 --> koniec programu.\n";
- cout << "Uwaga: podstawa p musi być ze zbioru {2 .. 36}. \n";
- while (true) { // Konwersacja
- cout << "\nzakres m..n i podstawa p: m n p = ";
- cin >> m >> n >> p;
- if (m <= 0 || n <= 0) break;
- for (unsigned i = m; i <= n; ++i) {
- k = toString(i, p, code);
- if (isPalindrom(code, k))
- cout << i << " = " << code << endl;
- }
- }
- cout << "\nKoniec programu\n";
- }
- // Zwraca true jeśli liczba k-cyfrowa w s jest palindromem.
- bool isPalindrom(char* s, unsigned k)
- {
- std::string num_str(s);
- std::string num_reversed = std::string(num_str.rbegin(), num_str.rend());
- return num_str == num_reversed;
- }
- // Konwersja liczby dodatniej n na postać znakową
- // w zapisie przy podstawie p do tablicy code.
- // Funkcja zwraca liczbę znaków rozwinięcia przy podstawie p.
- // Uwaga: w zależności od p: cyfry ze zbioru {0..9, A..Z}.
- unsigned toString(unsigned n, unsigned p, char* code)
- {
- const string signs{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
- 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U' };
- if (n<2 || p>static_cast<int>(signs.size()) - 1) return {};
- string result;
- do
- {
- result += signs[n % p];
- n /= p;
- } while (p > 0);
- reverse (begin(result), end(result));
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment