题目信息
解题思路
直接暴力模拟。
代码实现
#include <bits/stdc++.h>
using namespace std;
char s[2005];
int n;
vector<int> a, b;
int main() {
cin >> n >> s;
for (int i = 0; i < strlen(s); ++i) {
if (s[i] >= '0' && s[i] <= '9') {
a.push_back(s[i] - '0');
} else {
// islower: 判断字符是否为小写字母
a.push_back(islower(s[i]) ? (s[i] - 'a' + 10) : (s[i] - 'A' + 10));
}
}
// 判断回文
b = a;
reverse(a.begin(), a.end());
if (a == b) {
cout << "STEP=0\n";
return 0;
}
for (int stp = 1; stp <= 30; ++stp) {
int m = a.size();
for (int i = 0; i < m; ++i) {
// 加法
a[i] += b[i];
// 进位
if (i != m - 1) {
a[i + 1] += a[i] / n;
} else if (a[i] >= n) {
a.push_back(a[i] / n);
}
a[i] %= n;
}
// 判断回文
b = a;
reverse(b.begin(), b.end());
if (a == b) {
cout << "STEP=" << stp << '\n';
return 0;
}
}
cout << "Impossible!\n";
return 0;
}