#include
#include
#include
#include
#include
using namespace std; queue
que; stack
sta; bool isPalindrom(queue
ptr,stack
str) { int length = ptr.size(); int count = str.size(); for (int i = 0, j = 0; j < length&&i < count&&length == count; i++, j++) { if (ptr.front() == str.top()) { ptr.pop(); str.pop(); } else return false; } return true; } void ChangeRadix(int aimNumber,int radixNumber) { int temp; while (que.size()) { que.pop(); } while (sta.size()) { sta.pop(); } while (aimNumber) { temp = aimNumber%radixNumber; aimNumber = aimNumber / radixNumber; que.push(temp); sta.push(temp); } } int main(int argc, char argv[]) { //ifstream cin("F:\\test.txt"); int number; queue
temp; int j; while (cin >> number&&number != 0) { j = 0; for (int i = 2; i <= 16; i++) { ChangeRadix(number,i); if (isPalindrom(que, sta)) { temp.push(i); } } if (temp.size() > 0) { cout << "Number " << number << " is palindrom in basis"; while (!temp.empty()) { cout << ' ' << temp.front(); temp.pop(); } } else { cout << "Number " << number << " is not a palindrom"; } cout << endl; } return 0; }